@nanisoft/prism-llms 0.5.2 → 0.6.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.
@@ -0,0 +1,113 @@
1
+ # Reveal
2
+
3
+ A section that meets the reader: the wrapper that binds an arrival to the reader’s own scroll position, with no script and no second introduction for the hero.
4
+
5
+ ```tsx
6
+ import { Reveal } from '@nanisoft/prism-ui/components/reveal'
7
+ ```
8
+
9
+ ## Overview
10
+
11
+ Reveal is a section that meets the reader: the wrapper that binds an arrival to
12
+ the reader's own scroll position and to nothing else. It is a style the browser
13
+ resolves rather than a state a script flips, so there is no observer, no
14
+ listener and no client boundary, and the content exists from the first paint.
15
+
16
+ ## Guidelines
17
+
18
+ ### When to use
19
+
20
+ Use it on the bands a reader scrolls to. An arrival acknowledges the reader's
21
+ own movement, which is the only input it answers to, and a band that enters
22
+ the viewport as the reader arrives reads as a page composed for reading rather
23
+ than as one long poster.
24
+
25
+ Stagger with `delay` when bands arrive in a rhythm, and keep the stagger to a
26
+ page's own measure: three steps exist, and a cascade longer than the rhythm it
27
+ sits in is a wait the reader did not cause.
28
+
29
+ ### When not to use
30
+
31
+ Do not wrap the hero. A section above the fold when the page loads has already
32
+ finished entering, and the page does not introduce itself twice; the one
33
+ authored moment a page carries belongs to its hero, not to every band under
34
+ it.
35
+
36
+ Do not wrap everything. A reveal on every section is one identical entrance
37
+ wearing four different clothes, and the second arrival a reader notices is the
38
+ one where the device stops being about the content. Let the still bands
39
+ between the arriving ones carry their own weight.
40
+
41
+ Do not use it for feedback or for state. A control answering a reader is the
42
+ first law of motion and already has its scale; an arrival is the third law and
43
+ holds exactly one job.
44
+
45
+ ### Best practices
46
+
47
+ - Compose it around a Block, not inside one. The wrapper is the whole of the
48
+ component, every Block keeps its own surface, and no Block widens for a
49
+ behaviour the whole page shares.
50
+ - Remember the fallbacks are the design: a browser without scroll-driven
51
+ animations shows the section simply there, a reader who asked for less
52
+ motion gets the same still page, and neither of those outcomes is a failure
53
+ to be worked around.
54
+ - The `delay` steps are fractions of the entry rather than waits, so a reader
55
+ who scrolls fast arrives fast. That is the property that separates this law
56
+ from a timer, and it is worth keeping.
57
+
58
+ **Two cards arriving, the second a step behind the first. The demo is the**
59
+
60
+ ```tsx
61
+ import { Reveal } from '@nanisoft/prism-ui/components/reveal'
62
+
63
+ /**
64
+ * Two cards arriving, the second a step behind the first. The demo is the
65
+ * device at its smallest: a staggered pair inside one panel, so the rhythm is
66
+ * visible without a page to scroll.
67
+ *
68
+ * In this documentation frame the cards below the fold are the honest preview:
69
+ * scroll to them and they arrive, arrive again on the way back up at no delay,
70
+ * and a reader who has asked the platform for less motion finds them simply
71
+ * there.
72
+ */
73
+ export default function RevealDemo() {
74
+ return (
75
+ <div className="flex flex-col gap-4">
76
+ <Reveal>
77
+ <div className="bg-card text-card-foreground rounded-xl border p-6 shadow-sm">
78
+ <p className="text-muted-foreground text-sm font-medium tracking-wide uppercase">
79
+ First band
80
+ </p>
81
+ <h3 className="mt-2 text-xl font-semibold tracking-tight">
82
+ An arrival, bound to the scroll the reader owns
83
+ </h3>
84
+ <p className="text-muted-foreground mt-2 text-sm text-pretty">
85
+ No script decides when this plays. The hand on the scroll does, and
86
+ a browser that cannot run it shows the band simply there.
87
+ </p>
88
+ </div>
89
+ </Reveal>
90
+ <Reveal delay={1}>
91
+ <div className="bg-card text-card-foreground rounded-xl border p-6 shadow-sm">
92
+ <p className="text-muted-foreground text-sm font-medium tracking-wide uppercase">
93
+ Second band
94
+ </p>
95
+ <h3 className="mt-2 text-xl font-semibold tracking-tight">
96
+ The same arrival, a step behind
97
+ </h3>
98
+ <p className="text-muted-foreground mt-2 text-sm text-pretty">
99
+ The step is a fraction of the entry rather than a wait, so a reader
100
+ who scrolls fast arrives fast, and nothing here could delay them.
101
+ </p>
102
+ </div>
103
+ </Reveal>
104
+ </div>
105
+ )
106
+ }
107
+ ```
108
+
109
+ ## Props
110
+
111
+ **`children`** `ReactNode` · required · default: — — The band, grid or figure that arrives.
112
+ **`delay`** `1 | 2 | 3` · optional · default: — — How far into the page's rhythm this arrival sits behind the one before it, as a fraction of the entry rather than as a wait: the reader's scroll is the only clock, and a delay a reader could not hurry would be a delay the reader did not cause. Three steps, as on the ambient delays.
113
+ **`className`** `string` · optional · default: — — Layout only, exactly as on every Component.
@@ -1,9 +1,9 @@
1
1
  # Motion
2
2
 
3
- Two laws: feedback on a short scale, and a running figure on a cycle scale, both by token.
3
+ Three laws: feedback on a short scale, a running figure on a cycle scale, and an arrival bound to the reader's own scroll, all by token.
4
4
 
5
- Motion has two laws, and they are different laws rather than one law with an
6
- exception. The distinction is falsifiable: stop the animation and ask whether
5
+ Motion has three laws, and they are different laws rather than one law with
6
+ exceptions. The distinction is falsifiable: stop the animation and ask whether
7
7
  the figure is still true and still legible.
8
8
 
9
9
  **Feedback is a response.** Something happened because the reader did it. They
@@ -13,29 +13,46 @@ overshoots. The scale is `fast` 80ms, `base` 160ms and `slow` 280ms, with
13
13
  token rather than a value, and it does not decide reduced motion for itself.
14
14
 
15
15
  **A cycle is a demonstration.** A marker crosses a rail, a reticle crosses a
16
- series, a wavefront crosses a field. The reader did not cause it and is not
17
- waiting for it: the figure is making a claim about a mechanism and the motion is
18
- how the claim is made visible. If stopping the animation leaves nothing true and
19
- nothing legible, the motion was the figure, and the right component is one that
20
- says it is atmosphere.
16
+ series, a wavefront crosses a field, light crosses a ground. The reader did not
17
+ cause it and is not waiting for it: the figure is making a claim about a
18
+ mechanism and the motion is how the claim is made visible. If stopping the
19
+ animation leaves nothing true and nothing legible, the motion was the figure,
20
+ and the right component is one that says it is atmosphere.
21
21
 
22
- The cycle scale is separate because the two measure different things by a factor
22
+ **An arrival is bound to the reader's own scroll.** A section a reader scrolls
23
+ to may meet them, and the meeting is the third law rather than a loosened
24
+ second: it runs on CSS scroll-driven animations, so no script decides when it
25
+ plays and no timer can play it early; the content exists in the document from
26
+ the first paint; a browser that does not ship the timeline declines the whole
27
+ rule and shows the section simply there; and the universal reduced-motion rule
28
+ hands that reader the same still page. The one script-driven figure in the
29
+ system, `ParticleField`, follows the same test from the other side: it renders
30
+ its complete still figure on the server and the script only adds the movement.
31
+
32
+ The cycle scale is separate because it measures a different thing by a factor
23
33
  of twenty-five, and one name cannot mean both. `ambient` is in seconds, and the
24
- emitted contract measures it with a floor of one second: a cycle faster than that
25
- is unreadable before it is understood.
34
+ emitted contract measures it with a floor of one second: a cycle faster than
35
+ that is unreadable before it is understood.
26
36
 
27
- Three rules bound it, and none of them is a matter of taste.
37
+ Three rules bound the ambient layer, and none of them is a matter of taste.
28
38
 
29
- - **Nothing is hidden.** No ambient rule sets `opacity: 0`, and nothing waits
30
- for a script, an intersection or a timer. Every figure is complete at first
31
- paint, so a reader with scripting off, a print stylesheet or a crawler sees the
32
- whole drawing.
39
+ - **Nothing in the ambient layer is hidden.** No ambient rule sets `opacity: 0`
40
+ and no ambient figure waits for a script or a timer. Every figure is complete
41
+ at first paint, so a reader with scripting off, a print stylesheet or a
42
+ crawler sees the whole drawing. The reveal layer is the one exception ever
43
+ granted, and it is granted to the reader's own scroll position rather than to
44
+ a script: it lives behind a capability check, and collapses to the fully
45
+ visible form the moment anything, including reduced motion, declines to run
46
+ it.
33
47
  - **Reduced motion removes the movement, not the figure.** The
34
48
  `prefers-reduced-motion` block is one unlayered rule setting `animation: none`
35
49
  and `transition: none` on the universal selector, and because every resting
36
50
  state is the full form, that reader gets the same figure, still.
37
- - **Compositor properties only.** Every keyframe animates `transform` or
38
- `opacity`. Nothing in the layer animates a layout or paint property.
51
+ - **Compositor properties only.** Every ambient keyframe animates `transform`
52
+ or `opacity`. Nothing in the layer animates a layout or paint property. The
53
+ one named exception is the spectrum ink on display type, which animates a
54
+ gradient position because text cannot be moved behind its own gradient, and
55
+ the exception is a class in the stylesheet with a scope, not a licence.
39
56
 
40
57
  One rule covers the whole package rather than each component guarding itself, and
41
58
  that is a correction rather than a preference. A `motion-safe:` variant adds a
@@ -50,8 +67,8 @@ announcement, without the time.
50
67
  A keyframe is a mechanism and lives in the component package's stylesheet; a
51
68
  duration is a value and lives in the token source. They meet at exactly one
52
69
  place, an `animation` shorthand whose length is `var(--ambient-travel)`, so
53
- neither can invent the other. The six `prism-ambient-*` classes exist so that a
54
- component picks a cycle by naming a mechanism and never writes a timing.
70
+ neither can invent the other. The eight `prism-ambient-*` classes exist so that
71
+ a component picks a cycle by naming a mechanism and never writes a timing.
55
72
 
56
73
  <TokenTable group="motion" />
57
74
 
@@ -43,8 +43,8 @@ The read-only MCP endpoint is `https://prism.nanisoft.com/mcp`. It exposes nine
43
43
 
44
44
  ## This corpus
45
45
 
46
- Generated from the catalogue and the authored pages: 132
47
- Components, 126 Blocks, 18 Pages and 3
46
+ Generated from the catalogue and the authored pages: 135
47
+ Components, 127 Blocks, 18 Pages and 3
48
48
  live surfaces, plus the Overview, Foundation, Content, Patterns and Changelogs
49
49
  pages. The Changelogs pages are each
50
50
  published package's own changelog, byte for byte; `get_changelog` returns one
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanisoft/prism-llms",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Prism's agent-facing corpus: llms.txt, the Markdown mirror, prism-skill.md and the PrismDocsStore projection. One build-fresh dist/ serves npm, the site and the MCP server.",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  "@types/node": "^22.0.0",
39
39
  "typescript": "^5.7.0",
40
40
  "vitest": "^3.2.4",
41
- "@nanisoft/prism-tokens": "1.2.0",
42
- "@nanisoft/prism-ui": "1.3.0"
41
+ "@nanisoft/prism-tokens": "1.5.0",
42
+ "@nanisoft/prism-ui": "1.5.0"
43
43
  },
44
44
  "scripts": {
45
45
  "build": "node scripts/build.mjs",