@agimon-ai/po-backdrop-bamboo 0.0.0-alpha.13 → 0.0.0-alpha.15
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.mjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","fillBamboo"],"sources":["../../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../../src/extensions/(frontend)/fill/_lib/inkArt.ts","../../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web.mjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","fillBamboo"],"sources":["../../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../../src/extensions/(frontend)/fill/_lib/inkArt.ts","../../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":"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"}
|
package/dist/webClient.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webClient.cjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","useRef","useState","defineFill","defineWebPlugin","fillBamboo"],"sources":["../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/inkArt.ts","../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webClient.cjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","useRef","useState","defineFill","defineWebPlugin","fillBamboo"],"sources":["../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/inkArt.ts","../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":"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"}
|
package/dist/webClient.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webClient.mjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","fillBamboo"],"sources":["../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/inkArt.ts","../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webClient.mjs","names":["dayGrain","dayRight","dayTopLeft","dayBottomLeft","nightGrain","nightRight","nightTopLeft","nightBottomLeft","fillBamboo"],"sources":["../src/extensions/(frontend)/fill/_lib/assets/day-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/day-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-bottom-left.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-grain.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-right.webp?url","../src/extensions/(frontend)/fill/_lib/assets/night-top-left.webp?url","../src/extensions/(frontend)/fill/_lib/inkArt.ts","../src/extensions/(frontend)/fill/_components/BambooInk.tsx","../src/extensions/(frontend)/fill/Bamboo.backdrop.web.tsx","../generated/web.ts"],"sourcesContent":["export default import.meta.ROLLUP_FILE_URL_$oUiuAXR7gZMKRQU56HW2w;","export default import.meta.ROLLUP_FILE_URL_VRAku6fjghkApIISiBWPzg;","export default import.meta.ROLLUP_FILE_URL_FKNdLzKnlftW3t_gzo81yw;","export default import.meta.ROLLUP_FILE_URL_8HSUfh7cJHNFxCkInNzNXw;","export default import.meta.ROLLUP_FILE_URL_DUq8YoikZLXEejpNZ1KQvg;","export default import.meta.ROLLUP_FILE_URL_P4DPfwIRieI8P6q8r4JZRw;","export default import.meta.ROLLUP_FILE_URL_cn7IAAGY294pWGc7MpElVg;","export default import.meta.ROLLUP_FILE_URL_WPGYjwIlzWVNM1bYhOc83w;","import dayBottomLeft from './assets/day-bottom-left.webp?url';\nimport dayGrain from './assets/day-grain.webp?url';\nimport dayRight from './assets/day-right.webp?url';\nimport dayTopLeft from './assets/day-top-left.webp?url';\nimport nightBottomLeft from './assets/night-bottom-left.webp?url';\nimport nightGrain from './assets/night-grain.webp?url';\nimport nightRight from './assets/night-right.webp?url';\nimport nightTopLeft from './assets/night-top-left.webp?url';\n\n/**\n * The approved ink painting, cut into transparent corner layers: the bamboo and Po on the right, the mountain\n * and sun or moon top left, the banks and stream bottom left. The top cuts run through empty silk; the two\n * bottom pieces share one ground band, so they overlap by `blend` either side of `x2` and crossfade there.\n * The silk itself is the theme's own surface plus a neutral grain, so any theme shows through.\n */\nexport const INK_ART = { width: 1585, height: 992, cut: { x1: 716, y: 528, x2: 772, blend: 56 } } as const;\n\nexport const INK = {\n day: { grain: dayGrain, right: dayRight, topLeft: dayTopLeft, bottomLeft: dayBottomLeft },\n night: { grain: nightGrain, right: nightRight, topLeft: nightTopLeft, bottomLeft: nightBottomLeft },\n} as const;\n\n/** Painting pixels as a share of the backdrop's height, in container units. */\nconst cqh = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}cqh`;\nconst percent = (pixels: number): string => `${((pixels / INK_ART.height) * 100).toFixed(3)}%`;\n\n/**\n * Every layer scales with the backdrop's height, so at the painting's own 16:10 the three reassemble into\n * it exactly. Wider, empty silk opens between them; narrower, the left layers shrink until they meet the\n * right one's paint, and vanish on a portrait screen, leaving the bamboo and Po.\n */\nexport function inkLayout() {\n const { width, height, cut } = INK_ART;\n return {\n right: { aspectRatio: `${width - cut.x1} / ${height}` },\n topLeft: { height: percent(cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x1)})` },\n bottomLeft: { height: percent(height - cut.y), maxWidth: `calc(100% - ${cqh(width - cut.x2 - cut.blend)})` },\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { INK, inkLayout } from '../_lib/inkArt';\n\nconst LAYOUT = inkLayout();\n\n/** Where the night's fireflies hover around the sleeping Po, as shares of the right layer. */\nconst FIREFLIES = [\n { left: '60%', top: '64%' },\n { left: '73%', top: '58%' },\n { left: '86%', top: '70%' },\n { left: '55%', top: '80%' },\n] as const;\n\n/**\n * Po in the bamboo, painted in ink on silk. The silk is the theme's `deep` surface with a neutral grain, and\n * the painting's three corner layers sit on it, so the backdrop keeps the theme's colour in light and dark\n * alike; a dark scheme shows the night painting. At night a few fireflies drift, unless the person asks for\n * less motion or a story holds it `still`.\n */\nexport function BambooInk({ still = false }: { still?: boolean }) {\n const ref = useRef<HTMLDivElement>(null);\n const [dark, setDark] = useState(false);\n\n useEffect(() => {\n const root = ref.current;\n if (!root) return;\n // Read from inherited style, so a story's themed wrapper works like the page root.\n const read = () => setDark(getComputedStyle(root).colorScheme.includes('dark'));\n read();\n // Switching theme in Appearance rewrites the root's attributes; follow it.\n const watch = new MutationObserver(read);\n watch.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'style', 'class'] });\n return () => watch.disconnect();\n }, []);\n\n useEffect(() => {\n const root = ref.current;\n if (!root || still || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const runs = Array.from(root.querySelectorAll<HTMLElement>('[data-firefly]'), (firefly, index) =>\n firefly.animate(\n [\n { opacity: 0.1, transform: 'translate(0, 0)' },\n { opacity: 0.9, transform: `translate(${index % 2 ? -6 : 6}px, -8px)` },\n { opacity: 0.1, transform: 'translate(0, 0)' },\n ],\n { duration: 5200 + index * 1700, delay: -index * 1300, iterations: Infinity, easing: 'ease-in-out' },\n ),\n );\n return () => runs.forEach((run) => run.cancel());\n }, [dark, still]);\n\n const art = dark ? INK.night : INK.day;\n return (\n <div\n ref={ref}\n aria-hidden\n data-testid=\"bamboo-backdrop\"\n className=\"pointer-events-none absolute inset-0 overflow-hidden bg-po-deep select-none [container-type:size]\"\n >\n <img\n src={art.grain}\n alt=\"\"\n draggable={false}\n className=\"absolute inset-0 size-full object-cover opacity-50 mix-blend-overlay\"\n />\n <img\n src={art.topLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.topLeft}\n className=\"absolute top-0 left-0 w-auto object-contain object-left-top\"\n />\n <img\n src={art.bottomLeft}\n alt=\"\"\n draggable={false}\n style={LAYOUT.bottomLeft}\n className=\"absolute bottom-0 left-0 w-auto object-contain object-left-bottom\"\n />\n <div style={LAYOUT.right} className=\"absolute right-0 bottom-0 h-full\">\n <img src={art.right} alt=\"\" draggable={false} className=\"size-full\" />\n {dark\n ? FIREFLIES.map((place) => (\n <span\n key={place.left}\n data-firefly\n style={place}\n className=\"absolute size-1 rounded-full bg-po-yellow opacity-60 shadow-[0_0_6px_2px_var(--po-yellow)]\"\n />\n ))\n : null}\n </div>\n </div>\n );\n}\n","import { defineFill } from '@agimon-ai/po-core/web';\n\nimport { BambooInk } from './_components/BambooInk';\n\n/** Po's default background: Po in the bamboo, in ink on silk, behind whichever template is in use. `data` names it in Settings. */\nexport default defineFill({\n data: { label: 'Po bamboo', description: 'Po in the bamboo, painted in ink on silk.' },\n component: () => <BambooInk />,\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport fillBamboo from '../src/extensions/(frontend)/fill/Bamboo.backdrop.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'backdrop-bamboo',\n packageName: '@agimon-ai/po-backdrop-bamboo',\n host: {\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'backdrop', id: 'bamboo' }, fillBamboo)]; },\n },\n});\n"],"mappings":";;;;AAAA,IAAA,0BAAA,IAAA,IAAA,wCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,oBAAA,IAAA,IAAA,kCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,oBAAA,IAAA,IAAA,kCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,uBAAA,IAAA,IAAA,qCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,4BAAA,IAAA,IAAA,0CAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,sBAAA,IAAA,IAAA,oCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,sBAAA,IAAA,IAAA,oCAAe,YAAA,GAAA,CAAA,CAAA;;;ACAf,IAAA,yBAAA,IAAA,IAAA,uCAAe,YAAA,GAAA,CAAA,CAAA;;;;;;;;;ACef,MAAa,UAAU;CAAE,OAAO;CAAM,QAAQ;CAAK,KAAK;EAAE,IAAI;EAAK,GAAG;EAAK,IAAI;EAAK,OAAO;CAAG;AAAE;AAEhG,MAAa,MAAM;CACjB,KAAK;EAAE,OAAOA;EAAU,OAAOC;EAAU,SAASC;EAAY,YAAYC;CAAc;CACxF,OAAO;EAAE,OAAOC;EAAY,OAAOC;EAAY,SAASC;EAAc,YAAYC;CAAgB;AACpG;;AAGA,MAAM,OAAO,WAA2B,IAAK,SAAS,QAAQ,SAAU,IAAA,CAAK,QAAQ,CAAC,EAAE;AACxF,MAAM,WAAW,WAA2B,IAAK,SAAS,QAAQ,SAAU,IAAA,CAAK,QAAQ,CAAC,EAAE;;;;;;AAO5F,SAAgB,YAAY;CAC1B,MAAM,EAAE,OAAO,QAAQ,QAAQ;CAC/B,OAAO;EACL,OAAO,EAAE,aAAa,GAAG,QAAQ,IAAI,GAAG,KAAK,SAAS;EACtD,SAAS;GAAE,QAAQ,QAAQ,IAAI,CAAC;GAAG,UAAU,eAAe,IAAI,QAAQ,IAAI,EAAE,EAAE;EAAG;EACnF,YAAY;GAAE,QAAQ,QAAQ,SAAS,IAAI,CAAC;GAAG,UAAU,eAAe,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE;EAAG;CAC7G;AACF;;;AClCA,MAAM,SAAS,UAAU;;AAGzB,MAAM,YAAY;CAChB;EAAE,MAAM;EAAO,KAAK;CAAM;CAC1B;EAAE,MAAM;EAAO,KAAK;CAAM;CAC1B;EAAE,MAAM;EAAO,KAAK;CAAM;CAC1B;EAAE,MAAM;EAAO,KAAK;CAAM;AAC5B;;;;;;;AAQA,SAAgB,UAAU,EAAE,QAAQ,SAA8B;CAChE,MAAM,MAAM,OAAuB,IAAI;CACvC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,gBAAgB;EACd,MAAM,OAAO,IAAI;EACjB,IAAI,CAAC,MAAM;EAEX,MAAM,aAAa,QAAQ,iBAAiB,IAAI,CAAC,CAAC,YAAY,SAAS,MAAM,CAAC;EAC9E,KAAK;EAEL,MAAM,QAAQ,IAAI,iBAAiB,IAAI;EACvC,MAAM,QAAQ,SAAS,iBAAiB;GAAE,YAAY;GAAM,iBAAiB;IAAC;IAAc;IAAS;GAAO;EAAE,CAAC;EAC/G,aAAa,MAAM,WAAW;CAChC,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACd,MAAM,OAAO,IAAI;EACjB,IAAI,CAAC,QAAQ,SAAS,OAAO,WAAW,kCAAkC,CAAC,CAAC,SAAS;EACrF,MAAM,OAAO,MAAM,KAAK,KAAK,iBAA8B,gBAAgB,IAAI,SAAS,UACtF,QAAQ,QACN;GACE;IAAE,SAAS;IAAK,WAAW;GAAkB;GAC7C;IAAE,SAAS;IAAK,WAAW,aAAa,QAAQ,IAAI,KAAK,EAAE;GAAW;GACtE;IAAE,SAAS;IAAK,WAAW;GAAkB;EAC/C,GACA;GAAE,UAAU,OAAO,QAAQ;GAAM,OAAO,CAAC,QAAQ;GAAM,YAAY;GAAU,QAAQ;EAAc,CACrG,CACF;EACA,aAAa,KAAK,SAAS,QAAQ,IAAI,OAAO,CAAC;CACjD,GAAG,CAAC,MAAM,KAAK,CAAC;CAEhB,MAAM,MAAM,OAAO,IAAI,QAAQ,IAAI;CACnC,OACE,qBAAC,OAAD;EACO;EACL,eAAA;EACA,eAAY;EACZ,WAAU;EAJZ,UAAA;GAME,oBAAC,OAAD;IACE,KAAK,IAAI;IACT,KAAI;IACJ,WAAW;IACX,WAAU;GACX,CAAA;GACD,oBAAC,OAAD;IACE,KAAK,IAAI;IACT,KAAI;IACJ,WAAW;IACX,OAAO,OAAO;IACd,WAAU;GACX,CAAA;GACD,oBAAC,OAAD;IACE,KAAK,IAAI;IACT,KAAI;IACJ,WAAW;IACX,OAAO,OAAO;IACd,WAAU;GACX,CAAA;GACD,qBAAC,OAAD;IAAK,OAAO,OAAO;IAAO,WAAU;IAApC,UAAA,CACE,oBAAC,OAAD;KAAK,KAAK,IAAI;KAAO,KAAI;KAAG,WAAW;KAAO,WAAU;IAAa,CAAA,GACpE,OACG,UAAU,KAAK,UACb,oBAAC,QAAD;KAEE,gBAAA;KACA,OAAO;KACP,WAAU;IACX,GAJM,MAAM,IAIZ,CACF,IACD,IACD;;EACF;;AAET;;;;AC1FA,IAAA,8BAAe,WAAW;CACxB,MAAM;EAAE,OAAO;EAAa,aAAa;CAA4C;CACrF,iBAAiB,oBAAC,WAAD,CAAY,CAAA;AAC/B,CAAC;;;ACHD,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,YAAY,gBAAgB;CACvC,IAAI;CACJ,aAAa;CACb,MAAM,EACJ,IAAI,QAAyC;EAAE,OAAO,CAAC,IAAI;GAAE,MAAM;GAAY,IAAI;EAAS,GAAGC,2BAAU,CAAC;CAAG,EAC/G;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/po-backdrop-bamboo",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.15",
|
|
4
4
|
"description": "Po's default background: Po the panda in the bamboo, painted in ink on silk, on the active theme's own surface.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"backdrop",
|
|
@@ -49,12 +49,12 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@agimon-ai/po-core": "0.0.0-alpha.
|
|
52
|
+
"@agimon-ai/po-core": "0.0.0-alpha.155"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@agimon-ai/po-build": "0.0.0-alpha.
|
|
56
|
-
"@agimon-ai/po-web-components": "0.0.0-alpha.
|
|
57
|
-
"@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.
|
|
55
|
+
"@agimon-ai/po-build": "0.0.0-alpha.155",
|
|
56
|
+
"@agimon-ai/po-web-components": "0.0.0-alpha.155",
|
|
57
|
+
"@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.155",
|
|
58
58
|
"@earendil-works/pi-coding-agent": "1.5.1",
|
|
59
59
|
"@types/node": "26.6.5",
|
|
60
60
|
"@types/react": "19.3.0",
|