@cardstack/choreo 0.0.0 → 0.1.0-unstable.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/README.md +55 -6
  4. package/addon-main.cjs +4 -0
  5. package/declarations/anchors.d.ts +26 -0
  6. package/declarations/anchors.d.ts.map +1 -0
  7. package/declarations/arming.d.ts +33 -0
  8. package/declarations/arming.d.ts.map +1 -0
  9. package/declarations/beacon.d.ts +9 -0
  10. package/declarations/beacon.d.ts.map +1 -0
  11. package/declarations/beacons.d.ts +23 -0
  12. package/declarations/beacons.d.ts.map +1 -0
  13. package/declarations/changeset.d.ts +46 -0
  14. package/declarations/changeset.d.ts.map +1 -0
  15. package/declarations/choreo.d.ts +261 -0
  16. package/declarations/choreo.d.ts.map +1 -0
  17. package/declarations/compile.d.ts +45 -0
  18. package/declarations/compile.d.ts.map +1 -0
  19. package/declarations/deliver.d.ts +44 -0
  20. package/declarations/deliver.d.ts.map +1 -0
  21. package/declarations/easings.d.ts +20 -0
  22. package/declarations/easings.d.ts.map +1 -0
  23. package/declarations/far.d.ts +33 -0
  24. package/declarations/far.d.ts.map +1 -0
  25. package/declarations/film/clip.d.ts +51 -0
  26. package/declarations/film/clip.d.ts.map +1 -0
  27. package/declarations/film/clips.d.ts +155 -0
  28. package/declarations/film/clips.d.ts.map +1 -0
  29. package/declarations/film/film.d.ts +1208 -0
  30. package/declarations/film/film.d.ts.map +1 -0
  31. package/declarations/film/graph/adjust.d.ts +112 -0
  32. package/declarations/film/graph/adjust.d.ts.map +1 -0
  33. package/declarations/film/graph/compile.d.ts +140 -0
  34. package/declarations/film/graph/compile.d.ts.map +1 -0
  35. package/declarations/film/graph/host.d.ts +67 -0
  36. package/declarations/film/graph/host.d.ts.map +1 -0
  37. package/declarations/film/graph/nodes.d.ts +287 -0
  38. package/declarations/film/graph/nodes.d.ts.map +1 -0
  39. package/declarations/film/index.d.ts +24 -0
  40. package/declarations/film/index.d.ts.map +1 -0
  41. package/declarations/film/joins.d.ts +143 -0
  42. package/declarations/film/joins.d.ts.map +1 -0
  43. package/declarations/film/math.d.ts +15 -0
  44. package/declarations/film/math.d.ts.map +1 -0
  45. package/declarations/film/overlays.d.ts +54 -0
  46. package/declarations/film/overlays.d.ts.map +1 -0
  47. package/declarations/film/picture.d.ts +104 -0
  48. package/declarations/film/picture.d.ts.map +1 -0
  49. package/declarations/film/plate.d.ts +37 -0
  50. package/declarations/film/plate.d.ts.map +1 -0
  51. package/declarations/film/player.d.ts +120 -0
  52. package/declarations/film/player.d.ts.map +1 -0
  53. package/declarations/film/rail.d.ts +40 -0
  54. package/declarations/film/rail.d.ts.map +1 -0
  55. package/declarations/film/schedule.d.ts +93 -0
  56. package/declarations/film/schedule.d.ts.map +1 -0
  57. package/declarations/film/seam.d.ts +38 -0
  58. package/declarations/film/seam.d.ts.map +1 -0
  59. package/declarations/film/titles.d.ts +37 -0
  60. package/declarations/film/titles.d.ts.map +1 -0
  61. package/declarations/film/types.d.ts +544 -0
  62. package/declarations/film/types.d.ts.map +1 -0
  63. package/declarations/film.d.ts +3 -0
  64. package/declarations/film.d.ts.map +1 -0
  65. package/declarations/gesture.d.ts +33 -0
  66. package/declarations/gesture.d.ts.map +1 -0
  67. package/declarations/index.d.ts +26 -0
  68. package/declarations/index.d.ts.map +1 -0
  69. package/declarations/measure.d.ts +29 -0
  70. package/declarations/measure.d.ts.map +1 -0
  71. package/declarations/path.d.ts +73 -0
  72. package/declarations/path.d.ts.map +1 -0
  73. package/declarations/registry.d.ts +46 -0
  74. package/declarations/registry.d.ts.map +1 -0
  75. package/declarations/run.d.ts +406 -0
  76. package/declarations/run.d.ts.map +1 -0
  77. package/declarations/space.d.ts +31 -0
  78. package/declarations/space.d.ts.map +1 -0
  79. package/declarations/steps.d.ts +479 -0
  80. package/declarations/steps.d.ts.map +1 -0
  81. package/declarations/test-support/index.d.ts +30 -0
  82. package/declarations/test-support/index.d.ts.map +1 -0
  83. package/declarations/types.d.ts +761 -0
  84. package/declarations/types.d.ts.map +1 -0
  85. package/dist/anchors.js +34 -0
  86. package/dist/anchors.js.map +1 -0
  87. package/dist/arming.js +120 -0
  88. package/dist/arming.js.map +1 -0
  89. package/dist/beacon.js +25 -0
  90. package/dist/beacon.js.map +1 -0
  91. package/dist/beacons.js +77 -0
  92. package/dist/beacons.js.map +1 -0
  93. package/dist/changeset.js +129 -0
  94. package/dist/changeset.js.map +1 -0
  95. package/dist/choreo.js +1026 -0
  96. package/dist/choreo.js.map +1 -0
  97. package/dist/compile.js +1403 -0
  98. package/dist/compile.js.map +1 -0
  99. package/dist/deliver.js +326 -0
  100. package/dist/deliver.js.map +1 -0
  101. package/dist/easings.js +39 -0
  102. package/dist/easings.js.map +1 -0
  103. package/dist/far.js +147 -0
  104. package/dist/far.js.map +1 -0
  105. package/dist/film/clip.js +100 -0
  106. package/dist/film/clip.js.map +1 -0
  107. package/dist/film/clips.js +147 -0
  108. package/dist/film/clips.js.map +1 -0
  109. package/dist/film/film.js +4424 -0
  110. package/dist/film/film.js.map +1 -0
  111. package/dist/film/graph/adjust.js +160 -0
  112. package/dist/film/graph/adjust.js.map +1 -0
  113. package/dist/film/graph/compile.js +225 -0
  114. package/dist/film/graph/compile.js.map +1 -0
  115. package/dist/film/graph/host.js +77 -0
  116. package/dist/film/graph/host.js.map +1 -0
  117. package/dist/film/graph/nodes.js +500 -0
  118. package/dist/film/graph/nodes.js.map +1 -0
  119. package/dist/film/index.js +18 -0
  120. package/dist/film/index.js.map +1 -0
  121. package/dist/film/joins.js +260 -0
  122. package/dist/film/joins.js.map +1 -0
  123. package/dist/film/math.js +49 -0
  124. package/dist/film/math.js.map +1 -0
  125. package/dist/film/overlays.js +66 -0
  126. package/dist/film/overlays.js.map +1 -0
  127. package/dist/film/picture.js +58 -0
  128. package/dist/film/picture.js.map +1 -0
  129. package/dist/film/plate.js +36 -0
  130. package/dist/film/plate.js.map +1 -0
  131. package/dist/film/player.js +79 -0
  132. package/dist/film/player.js.map +1 -0
  133. package/dist/film/rail.js +38 -0
  134. package/dist/film/rail.js.map +1 -0
  135. package/dist/film/schedule.js +238 -0
  136. package/dist/film/schedule.js.map +1 -0
  137. package/dist/film/seam.js +64 -0
  138. package/dist/film/seam.js.map +1 -0
  139. package/dist/film/titles.js +45 -0
  140. package/dist/film/titles.js.map +1 -0
  141. package/dist/film/types.js +2 -0
  142. package/dist/film/types.js.map +1 -0
  143. package/dist/film.js +18 -0
  144. package/dist/film.js.map +1 -0
  145. package/dist/gesture.js +111 -0
  146. package/dist/gesture.js.map +1 -0
  147. package/dist/index.js +9 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/measure.js +99 -0
  150. package/dist/measure.js.map +1 -0
  151. package/dist/path.js +272 -0
  152. package/dist/path.js.map +1 -0
  153. package/dist/registry.js +55 -0
  154. package/dist/registry.js.map +1 -0
  155. package/dist/run.js +2423 -0
  156. package/dist/run.js.map +1 -0
  157. package/dist/space.js +57 -0
  158. package/dist/space.js.map +1 -0
  159. package/dist/steps.js +831 -0
  160. package/dist/steps.js.map +1 -0
  161. package/dist/test-support/index.js +150 -0
  162. package/dist/test-support/index.js.map +1 -0
  163. package/dist/types.js +2 -0
  164. package/dist/types.js.map +1 -0
  165. package/package.json +201 -6
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `@cardstack/choreo/film` — the film construct: a headless cutting room in
3
+ * which a 3D scene takes the place of the video track. See
4
+ * notes/film-construct.md for the two reference films it was lifted from.
5
+ */
6
+ export { Clip } from './clip';
7
+ export { type ClipEnd, type ClipKind, clipLanes, type ClipLook, type ClipSpec, type ClipState, clipWindow, resolveClip, resolveClips, type ResolvedClip, } from './clips.ts';
8
+ export { Film, type FilmContext, type FilmSignature, TICK } from './film';
9
+ export { Adjustment, Build, Filter, IFRAME_PICTURE, Light, Look, Mix, Set, SOUND, Sun, Weather, Winter, } from './graph/adjust';
10
+ export { type AttachNode, type CompiledGraph, compileGraph, type EyeNode, type GraphNode, type GroupNode, type JoinNode, type Patch, type PatchNode, type ShotNode, type ToNode, type VoiceNode, } from './graph/compile.ts';
11
+ export { FilmGraph, type FilmGraphSignature, type FilmVocabulary, VOCABULARY, } from './graph/host';
12
+ export { collectGraph, Eye, Freeze, Attach as GraphAttach, Chapter as GraphChapter, Insert as GraphInsert, GraphNodeComponent, type GraphProvider, Stamp as GraphStamp, JoinInto, Lineup, Mark, PatchComponent, Sequence, Shot, Sky, Spine, To, Trace, Type, Video, Voice, } from './graph/nodes';
13
+ export { Blend, Blur, Dip, Flash, inGlass, Iris, JOIN_SECS, Joins, Luma, Melt, type Presentation, type PresentationComponent, PRESENTATIONS, type PresentationSignature, retire, seamShape, STILL_JOINS, Wipe, } from './joins';
14
+ export { clamp01, hex, lerp, luminance, mmss, RAD, rgba, smooth, } from './math.ts';
15
+ export { Captions, Insert, Stamp, Track } from './overlays';
16
+ export { IframePicture, type IframePictureSignature, type PictureSpec, } from './picture';
17
+ export { Plate } from './plate';
18
+ export { Burst, Menu, type MenuEntry, type PlaybarSegment, Player, } from './player';
19
+ export { Rail, type RailMark } from './rail';
20
+ export { beatStart, chapterHeads, type Content, contents, type Cue, cues, joinInto, type Schedule, schedule, secsBefore, tailFor, totalSecs, type Waypoint, waypoints, } from './schedule.ts';
21
+ export { Seam } from './seam.ts';
22
+ export { EndCard, Gate } from './titles';
23
+ export type { Beat, Cam, Chapter, FilmClock, FilmGrade, FilmHandle, Join, JoinName, LookFx, Over, Picture, PlateMode, Pt3, SeamSpec, ShotState, } from './types.ts';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/film/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,cAAc,EACd,KAAK,EACL,IAAI,EACJ,GAAG,EACH,GAAG,EACH,KAAK,EACL,GAAG,EACH,OAAO,EACP,MAAM,GACP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,GAAG,EACH,MAAM,EACN,MAAM,IAAI,WAAW,EACrB,OAAO,IAAI,YAAY,EACvB,MAAM,IAAI,WAAW,EACrB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,IAAI,UAAU,EACnB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,GAAG,EACH,KAAK,EACL,EAAE,EACF,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,GACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,EACL,IAAI,EACJ,GAAG,EACH,KAAK,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,aAAa,EACb,KAAK,qBAAqB,EAC1B,MAAM,EACN,SAAS,EACT,WAAW,EACX,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,GAAG,EACH,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,KAAK,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,OAAO,EACZ,QAAQ,EACR,KAAK,GAAG,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,QAAQ,EACb,QAAQ,EACR,UAAU,EACV,OAAO,EACP,SAAS,EACT,KAAK,QAAQ,EACb,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,IAAI,EACJ,GAAG,EACH,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,OAAO,EACP,SAAS,EACT,GAAG,EACH,QAAQ,EACR,SAAS,GACV,MAAM,YAAY,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * THE JOINS, as presentations.
3
+ *
4
+ * A join is what happens to the OUTGOING frame while the incoming shot
5
+ * plays underneath it from its very first frame: the still is swept off,
6
+ * thinned, closed in a circle, covered with a colour. That is one
7
+ * contract — a component given the still and told how long it has — and
8
+ * the film's twelve seams are twelve components that satisfy it. A
9
+ * thirteenth, written in an app, satisfies it the same way and is named
10
+ * from a shot's `<f.Join @presentation={{MyWipe}} />`; the film learns
11
+ * nothing about it but its length.
12
+ *
13
+ * Three of the twelve are not presentations at all: a `cut` and a
14
+ * `whip` are the camera's, a `sweep` is the light's, and the film plays
15
+ * those itself. Three more — `blend`, `melt`, `dip` — the picture can
16
+ * do in its own glass (`Picture.dissolve`) and only fall back to a still
17
+ * here when it cannot.
18
+ *
19
+ * A seam that never ends is a lid: every overlay retires itself when its
20
+ * animation ends, and a seekable one (stood at a time by an exact film)
21
+ * is taken off by the film instead.
22
+ */
23
+ import Component from '@glimmer/component';
24
+ import type { Join, JoinName, Over } from './types.ts';
25
+ export declare const retire: import("ember-modifier").FunctionBasedModifier<{
26
+ Args: {
27
+ Positional: [boolean | undefined];
28
+ Named: import("ember-modifier/-private/signature").EmptyObject;
29
+ };
30
+ Element: HTMLElement;
31
+ }>;
32
+ /** what a presentation is given */
33
+ export interface PresentationSignature {
34
+ Args: {
35
+ /** where the seam is aimed, as inline custom properties (an iris's centre) */
36
+ at?: string;
37
+ /** the colour a dip passes through */
38
+ color?: string;
39
+ /** the film stands the overlay at a time itself: never retire on `animationend` */
40
+ seekable?: boolean;
41
+ /** the outgoing frame, as a data URL; empty when the picture held it in its own glass */
42
+ still: string;
43
+ };
44
+ }
45
+ /** a presentation is a Glimmer component class on the contract above — the class, not a `ComponentLike`, so an app's and the library's typings agree */
46
+ export type PresentationComponent = typeof Component<PresentationSignature>;
47
+ /** a seam the film can play: its presentation, how long it holds the picture, whether it needs a still */
48
+ export interface Presentation {
49
+ /** the overlay; none for a seam the camera or the light plays */
50
+ component?: PresentationComponent;
51
+ /**
52
+ * How deep this seam goes by default, when the score does not say
53
+ * (`Over`). A presentation an app brings may want `everything` — a
54
+ * curtain that drops in front of the picture and leaves the caption
55
+ * standing in front of it is not a curtain.
56
+ */
57
+ over?: Over;
58
+ /** seconds the seam holds the picture */
59
+ secs: number;
60
+ /** the seam paints a still of the outgoing frame over the incoming one */
61
+ still: boolean;
62
+ }
63
+ /** the outgoing frame itself, swept off along the sun's diagonal behind a feathered edge */
64
+ export declare class Wipe extends Component<PresentationSignature> {
65
+ }
66
+ /** the long soft one, no push and no colour */
67
+ export declare class Melt extends Component<PresentationSignature> {
68
+ }
69
+ /** the outgoing frame held as a still and faded over the live incoming shot */
70
+ export declare class Blend extends Component<PresentationSignature> {
71
+ }
72
+ /** the old shot closes in a circle onto the incoming subject; the centre rides inline custom properties */
73
+ export declare class Iris extends Component<PresentationSignature> {
74
+ }
75
+ /** the still blurs out over the incoming shot; also the freeze half of a rack-defocus */
76
+ export declare class Blur extends Component<PresentationSignature> {
77
+ }
78
+ /** the still dissolves by its own luminance */
79
+ export declare class Luma extends Component<PresentationSignature> {
80
+ }
81
+ /** a white frame, and the picture comes back through it */
82
+ export declare class Flash extends Component<PresentationSignature> {
83
+ }
84
+ /** freeze under, veil over: the old shot holds while the colour closes, the seam passes in the dark, the veil lifts on the new shot */
85
+ export declare class Dip extends Component<PresentationSignature> {
86
+ get veil(): string;
87
+ }
88
+ /**
89
+ * A SEAM AS TWO NUMBERS, at progress `p`.
90
+ *
91
+ * `mix` is how much of the HELD frame is over the live one; `veil` is how
92
+ * much of a colour is over both. The picture composites them in light,
93
+ * and the film reveals the incoming furniture by what is left over —
94
+ * `1 - max(mix, veil)`. One number in, two halves out: that is the whole
95
+ * seam, and it is why a seek through one is free (a function of the
96
+ * clock, with nothing to stand at a time).
97
+ *
98
+ * Only the three the glass can hold are here. A wipe and an iris are
99
+ * SHAPES rather than mixes — they need pixels in the DOM to sweep and to
100
+ * clip — and they keep their presentation.
101
+ */
102
+ export declare function seamShape(kind: JoinName, p: number): {
103
+ mix: number;
104
+ veil: number;
105
+ };
106
+ /** the seams the picture can hold in its own glass, given `Picture.seam` */
107
+ export declare function inGlass(kind: JoinName): boolean;
108
+ /** the film's own twelve seams, by name */
109
+ export declare const PRESENTATIONS: Record<Join, Presentation>;
110
+ /** how long each join holds the picture, in seconds */
111
+ export declare const JOIN_SECS: Record<string, number>;
112
+ /** the joins that hold a still of the outgoing shot over the incoming one */
113
+ export declare const STILL_JOINS: ReadonlySet<string>;
114
+ export interface JoinsSignature {
115
+ Args: {
116
+ /** the colour a dip passes through */
117
+ dipColor?: string;
118
+ /** the outgoing frame, when the page could not hold it in its own glass */
119
+ freeze?: string;
120
+ /** the iris's centre, as inline custom properties */
121
+ irisAt?: string;
122
+ /** which seam is playing */
123
+ kind: '' | JoinName;
124
+ /** every seam the film knows: the twelve, and any a score brought */
125
+ presentations: Record<string, Presentation>;
126
+ /** the film drives the overlay's clock: it is never retired by its own end */
127
+ seekable?: boolean;
128
+ /**
129
+ * A NEW ELEMENT PER CUT. Keyed on the stamp so each overlay plays from
130
+ * its own first frame; the number only ever goes up.
131
+ */
132
+ stamp: number;
133
+ };
134
+ }
135
+ /**
136
+ * THE SEAM ON SCREEN: whichever presentation the kind names, given the
137
+ * still, a new element per cut. A seam that needs a still and has none
138
+ * (the picture held it in its own glass) paints nothing here.
139
+ */
140
+ export declare class Joins extends Component<JoinsSignature> {
141
+ get presentation(): PresentationComponent | undefined;
142
+ }
143
+ //# sourceMappingURL=joins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../src/film/joins.gts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** the small arithmetic every film does: the same four lines, once */
2
+ export declare const RAD: number;
3
+ export declare const lerp: (a: number, b: number, t: number) => number;
4
+ export declare const clamp01: (v: number) => number;
5
+ /** smoothstep on [0,1] */
6
+ export declare const smooth: (t: number) => number;
7
+ export declare const hex: (h: string) => [number, number, number];
8
+ /** relative luminance of a #rrggbb, 0..1 */
9
+ export declare const luminance: (h: string) => number;
10
+ /** a #rrggbb at an alpha, as CSS */
11
+ export declare const rgba: (h: string, a: number) => string;
12
+ export declare const mmss: (s: number) => string;
13
+ /** the shortest way round a circle, radians */
14
+ export declare const wrapAngle: (d: number) => number;
15
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/film/math.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,eAAO,MAAM,GAAG,QAAgB,CAAC;AAEjC,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MACtC,CAAC;AAElB,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,MAAqC,CAAC;AAE1E,0BAA0B;AAC1B,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,KAAG,MAGlC,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAMrC,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAM3C,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,MAGhC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MASrC,CAAC"}
@@ -0,0 +1,54 @@
1
+ import Component from '@glimmer/component';
2
+ import type { Beat, ElementModifier } from './types.ts';
3
+ export interface InsertSignature {
4
+ Args: {
5
+ beat: Beat;
6
+ /** the photograph failed to load: drop the plate */
7
+ missing: () => void;
8
+ src: string;
9
+ };
10
+ }
11
+ /**
12
+ * THE PHOTOGRAPH, cut in beside the model. The model is a model, and
13
+ * there is a limit to what a film can claim with one; a real building at
14
+ * the moment the commentary names it settles the claim. Wiped rather
15
+ * than faded — a fade says "meanwhile", a wipe says "and here it is" —
16
+ * and it carries its own credit.
17
+ */
18
+ export declare class Insert extends Component<InsertSignature> {
19
+ }
20
+ export interface CaptionsSignature {
21
+ Args: {
22
+ /** the line being spoken */
23
+ line?: string;
24
+ };
25
+ }
26
+ /** CAPTIONS: the narration, printed — an accessibility track, and before
27
+ * any voice exists the only way to find out a line is too long */
28
+ export declare class Captions extends Component<CaptionsSignature> {
29
+ }
30
+ export interface TrackSignature {
31
+ Args: {
32
+ /** hands the film its leader, tether and ring */
33
+ wire: ElementModifier<SVGSVGElement>;
34
+ };
35
+ }
36
+ /**
37
+ * THE GLASS keeps only what must connect DOM to world — the leader from a
38
+ * caption, the mark's tether, the ring on a named point — projected
39
+ * every frame by the film. The traces themselves live IN the scene.
40
+ */
41
+ export declare class Track extends Component<TrackSignature> {
42
+ }
43
+ export interface StampSignature {
44
+ Args: {
45
+ /** a new element per step, so the strike replays from its own first frame */
46
+ step: number;
47
+ word: string;
48
+ };
49
+ }
50
+ /** THE STAMP: a hanko, not a title — it lands hard, settles at once, and
51
+ * is simply replaced by the next; the lineup's roll call */
52
+ export declare class Stamp extends Component<StampSignature> {
53
+ }
54
+ //# sourceMappingURL=overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/film/overlays.gts"],"names":[],"mappings":"AAsHA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;QACX,oDAAoD;QACpD,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED;;;;;;GAMG;AAEH,qBAAa,MAAO,SAAQ,SAAS,CAAC,eAAe,CAAC;CA8ErD;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,4BAA4B;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;mEACmE;AAEnE,qBAAa,QAAS,SAAQ,SAAS,CAAC,iBAAiB,CAAC;CAezD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,iDAAiD;QACjD,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;KACtC,CAAC;CACH;AAED;;;;GAIG;AAEH,qBAAa,KAAM,SAAQ,SAAS,CAAC,cAAc,CAAC;CA6DnD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,6EAA6E;QAC7E,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;6DAC6D;AAE7D,qBAAa,KAAM,SAAQ,SAAS,CAAC,cAAc,CAAC;CAwBnD"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * THE PICTURE, AS A COMPONENT.
3
+ *
4
+ * A film does not own a picture; it is handed one. Until Phase 2 it was
5
+ * handed fourteen arguments about the page behind the iframe — where it
6
+ * lives, where its files are, how it is seated before the door, the rig's
7
+ * mid-height, how much frosted city a frame can carry — and none of them
8
+ * were about the edit. Now the picture is a component in the film's
9
+ * `<:picture>` block, and those are ITS arguments:
10
+ *
11
+ * <Film @name='sagrada' @seek='exact' @clock={{CLOCK}}>
12
+ * <:picture>
13
+ * <IframePicture @src={{this.src}} @assets={{this.assets}}
14
+ * @standing={{T_TODAY}} @seat={{seat}} @rigMid={{6.6}} @cityGlass={{0.16}}
15
+ * @grades={{GRADES}} @lookFx={{LOOK_FX}} @title='Sagrada Família' />
16
+ * </:picture>
17
+ * <:default as |f|>…the score…</:default>
18
+ * </Film>
19
+ *
20
+ * The component renders nothing; it REGISTERS its spec with the film (the
21
+ * block yields the registrar), a frame after render so the write never
22
+ * lands inside the render that reads it. It also declares the picture's
23
+ * ADJUSTMENTS — the typed knobs a score may hold on it, `f.picture.*` —
24
+ * which for the iframe picture are Look, Weather, Winter, Sun, Light,
25
+ * Set and Build (`graph/adjust.gts`). A third kind of picture (a video, a
26
+ * three.js scene in the same document) is another component with its own
27
+ * spec and its own adjustments; the film never sees the difference.
28
+ */
29
+ import Component from '@glimmer/component';
30
+ import { IFRAME_PICTURE } from './graph/adjust';
31
+ import type { FilmGrade, LookFx, Picture } from './types.ts';
32
+ /** what a picture tells the film about itself, once */
33
+ export interface PictureSpec {
34
+ /** the editorial accent on a dark frame, and on a light one (the scene's own palette when unset) */
35
+ accent?: {
36
+ dark: string;
37
+ light?: string;
38
+ };
39
+ /** the adjustments a score may hold on this picture, yielded as `f.picture.*` */
40
+ adjustments: typeof IFRAME_PICTURE;
41
+ /** where the picture's files live: `vo/<id>.mp3`, `luts/*.cube`, photographs */
42
+ assets: string;
43
+ /** how much of a frosted city a film frame can carry (the page's own is 0.30) */
44
+ cityGlass?: number;
45
+ /** how much a passing cloud thickens the air */
46
+ cloudHaze?: number;
47
+ /** how much each mood brightens the frame */
48
+ gradeLum?: Record<string, number>;
49
+ /** the moods, as numbers the glass can take */
50
+ grades?: Record<string, FilmGrade>;
51
+ /** how each named look is worn */
52
+ lookFx?: Record<string, LookFx>;
53
+ /** how much of a stock the picture wears when a shot names one */
54
+ lutAmount?: number;
55
+ /** how the door is lit: the hour and the key light, degrees */
56
+ poster?: {
57
+ light?: {
58
+ az: number;
59
+ el: number;
60
+ };
61
+ theme?: number;
62
+ };
63
+ /** the rig's mid-height: `lookY` is world height minus this */
64
+ rigMid?: number;
65
+ /**
66
+ * THE SEAMS THIS PICTURE CAN RUN IN ITS OWN GLASS, by name. A join that
67
+ * names one is handed to `Picture.seam` with its progress instead of
68
+ * being drawn as an overlay in this document — which is the only way a
69
+ * transition can be a SHADER, and the only way it can composite in
70
+ * light. Declared the way `adjustments` is: the actor owns the
71
+ * vocabulary, the film hands it values and knows nothing else about it.
72
+ */
73
+ seams?: string[];
74
+ /** told once when the picture arrives, before the door: what it should show */
75
+ seat?: (picture: Picture) => void;
76
+ /** the picture's page, mounted in an iframe */
77
+ src: string;
78
+ /** an already-fetched page, for hosts that cannot navigate an iframe to raw HTML */
79
+ srcdoc?: string;
80
+ /** the page's clock at which the subject stands whole */
81
+ standing: number;
82
+ /** the iframe's accessible name */
83
+ title: string;
84
+ /** how type standing in the scene is set */
85
+ worldType?: {
86
+ family?: string;
87
+ track?: number;
88
+ weight?: number;
89
+ };
90
+ }
91
+ export interface IframePictureSignature {
92
+ Args: Omit<PictureSpec, 'adjustments'> & {
93
+ /** the film's registrar, yielded by its `<:picture>` block */
94
+ register: (spec: PictureSpec | null) => void;
95
+ };
96
+ }
97
+ /** a WebGL page in an iframe, addressed through the `Picture` port: both reference films' kind */
98
+ export declare class IframePicture extends Component<IframePictureSignature> {
99
+ private pending;
100
+ private get spec();
101
+ /** registers a frame after render, and again whenever an argument changes */
102
+ private attach;
103
+ }
104
+ //# sourceMappingURL=picture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picture.d.ts","sourceRoot":"","sources":["../../src/film/picture.gts"],"names":[],"mappings":"AA2IA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7D,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,oGAAoG;IACpG,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,iFAAiF;IACjF,WAAW,EAAE,OAAO,cAAc,CAAC;IACnC,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG;QACvC,8DAA8D;QAC9D,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;KAC9C,CAAC;CACH;AAED,kGAAkG;AAClG,qBAAa,aAAc,SAAQ,SAAS,CAAC,sBAAsB,CAAC;IAClE,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,KAAK,IAAI,GAsBf;IAED,6EAA6E;IAC7E,OAAO,CAAC,MAAM,CAgBX;CAgBJ"}
@@ -0,0 +1,37 @@
1
+ import Component from '@glimmer/component';
2
+ import type { Beat, ElementModifier } from './types.ts';
3
+ export interface PlateSignature {
4
+ Args: {
5
+ /** the beat being set */
6
+ beat: Beat;
7
+ /** the chapter's numeral, set enormous behind a plate */
8
+ chapterN: string;
9
+ /** `--cf-glyphs`: how many characters the word is, for the column's size */
10
+ glyphFit: string;
11
+ /** 'is-latin' | 'is-tall' | '' — the script's own setting */
12
+ glyphTone: string;
13
+ /** the film's own handle on the block, for the parallax and the fade */
14
+ mount: ElementModifier;
15
+ /** one pass behind the boot: content mounts on this so its entrance is a real insertion */
16
+ rolling: boolean;
17
+ /** when each of up to four phrases lands, seconds into the beat */
18
+ sayAt: number[];
19
+ /** when the kicker, the word and the reading land, seconds into the beat */
20
+ typeAt: number[];
21
+ };
22
+ }
23
+ /**
24
+ * THE FRONT LAYER — the lower third, the title, the plate and the point,
25
+ * which are one component set four ways. Keyed on the beat, so every
26
+ * hand-off replays the delivery: the kicker rises, the word lands
27
+ * centre-out on an overshoot, the reading and the gloss follow, and the
28
+ * phrases arrive one by one against the measured read. A beat change
29
+ * drops the old type in one quick fall. All of it is score vocabulary.
30
+ *
31
+ * Each row is a PLANE, and the nesting is load-bearing: the wrapper is
32
+ * the plane and the film's loop drifts it, the paragraph inside is the
33
+ * type and Motion delivers it. One writer each.
34
+ */
35
+ export declare class Plate extends Component<PlateSignature> {
36
+ }
37
+ //# sourceMappingURL=plate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plate.d.ts","sourceRoot":"","sources":["../../src/film/plate.gts"],"names":[],"mappings":"AAqMA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,yBAAyB;QACzB,IAAI,EAAE,IAAI,CAAC;QACX,yDAAyD;QACzD,QAAQ,EAAE,MAAM,CAAC;QACjB,4EAA4E;QAC5E,QAAQ,EAAE,MAAM,CAAC;QACjB,6DAA6D;QAC7D,SAAS,EAAE,MAAM,CAAC;QAClB,wEAAwE;QACxE,KAAK,EAAE,eAAe,CAAC;QACvB,2FAA2F;QAC3F,OAAO,EAAE,OAAO,CAAC;QACjB,mEAAmE;QACnE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,4EAA4E;QAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AAEH,qBAAa,KAAM,SAAQ,SAAS,CAAC,cAAc,CAAC;CA+QnD"}
@@ -0,0 +1,120 @@
1
+ import Component from '@glimmer/component';
2
+ import type { Chapter, ElementModifier } from './types.ts';
3
+ /** one chapter as a segment of the scrub bar */
4
+ export interface PlaybarSegment {
5
+ head: number;
6
+ n: string;
7
+ style: string;
8
+ title: string;
9
+ }
10
+ /** what the hand is pointing at on the bar: the chapter and the time */
11
+ export interface ScrubTip {
12
+ ch: string;
13
+ t: string;
14
+ }
15
+ export interface PlayerSignature {
16
+ Args: {
17
+ /** the front door is up: the transport waits outside */
18
+ away: boolean;
19
+ /** which cut of the film this is; shown only under debug */
20
+ build?: string;
21
+ /** toggle captions */
22
+ cc: () => void;
23
+ chapter: Chapter;
24
+ clock: string;
25
+ debug?: boolean;
26
+ duration: string;
27
+ /** the fader moved */
28
+ fade: (e: Event) => void;
29
+ full: boolean;
30
+ hear: () => void;
31
+ /** nobody has touched the frame for a while: the apparatus leaves */
32
+ idle: boolean;
33
+ /** rolling AND not held by the viewer: what the play button shows */
34
+ live: boolean;
35
+ /** sound on, and the fader up: the speaker glyph's three states */
36
+ loud: 'high' | 'low' | 'off';
37
+ menu: boolean;
38
+ next: () => void;
39
+ playbar: PlaybarSegment[];
40
+ prev: () => void;
41
+ restart: () => void;
42
+ screen: () => void;
43
+ /** the fraction the hand is holding while scrubbing, else null */
44
+ scrubAt: null | number;
45
+ scrubDown: (event: Event) => void;
46
+ scrubLeave: () => void;
47
+ scrubMove: (event: Event) => void;
48
+ scrubUp: (event: Event) => void;
49
+ /** keeps the bar's element, for the slider's live value */
50
+ slider: ElementModifier;
51
+ sound: boolean;
52
+ subsOn: boolean;
53
+ /** the bubble over the bar, while a pointer is on it */
54
+ tip: null | ScrubTip;
55
+ toc: () => void;
56
+ toggle: () => void;
57
+ /** measures the track, so the head can sit at the fill's end in pixels */
58
+ trackWrap: ElementModifier;
59
+ /** the master fader, 0..1 */
60
+ vol: number;
61
+ /** the fader's value as a custom property, for its own fill */
62
+ volStyle: string;
63
+ };
64
+ }
65
+ /**
66
+ * THE PLAYER. The grammar every viewer knows from a decade of video on the
67
+ * web: one full-width bar with the chapters as segments, a knob that sits
68
+ * exactly where the fill ends, the transport on the left, the modes on
69
+ * the right, the time beside the chapter's name, and the whole apparatus
70
+ * fading off the picture when nobody is touching it. The bar listens: a
71
+ * resting pointer gets the chapter and the time in a bubble and a ghost
72
+ * fill to where it would cut, and every button names itself and its key.
73
+ * The playhead is honest: a film cut on a chased lens cannot seek, so the
74
+ * drag reads as time and the release RE-CUTS from the shot under the hand.
75
+ */
76
+ export declare class Player extends Component<PlayerSignature> {
77
+ }
78
+ export interface BurstSignature {
79
+ Args: {
80
+ /** the animation ran out: take the glyph down */
81
+ done: () => void;
82
+ kind: 'pause' | 'play';
83
+ };
84
+ }
85
+ /**
86
+ * THE CONFIRMATION GLYPH: a play or a pause, once, in the middle of the
87
+ * picture, gone in half a second — the way every player answers a tap
88
+ * on the glass.
89
+ */
90
+ export declare class Burst extends Component<BurstSignature> {
91
+ }
92
+ /** a chapter, as the menu lists it */
93
+ export interface MenuEntry {
94
+ head: number;
95
+ here: boolean;
96
+ n: string;
97
+ secs: number;
98
+ shots: number;
99
+ title: string;
100
+ }
101
+ export interface MenuSignature {
102
+ Args: {
103
+ contents: MenuEntry[];
104
+ /** the key legend under the list */
105
+ keys?: string;
106
+ pick: (head: number) => void;
107
+ sub: string;
108
+ title: string;
109
+ };
110
+ }
111
+ /**
112
+ * THE DISC MENU. A film with chapters owes the viewer a way into them,
113
+ * and the arrow keys alone are a secret. Picking one re-cuts the score
114
+ * from that chapter's head — the same move the arrows make, because a
115
+ * skip here is an edit and never a seek. The film keeps running behind
116
+ * it, blurred: a menu that freezes the picture makes it feel like a file.
117
+ */
118
+ export declare class Menu extends Component<MenuSignature> {
119
+ }
120
+ //# sourceMappingURL=player.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/film/player.gts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import Component from '@glimmer/component';
2
+ import type { Chapter } from './types.ts';
3
+ /** a chapter as a door on the rule */
4
+ export interface RailMark {
5
+ /** where on the rule, 0..1 */
6
+ at: number;
7
+ done: boolean;
8
+ head: number;
9
+ here: boolean;
10
+ /** the label the door announces when the rule is a clock */
11
+ label?: string;
12
+ n: string;
13
+ title: string;
14
+ }
15
+ export interface RailSignature {
16
+ Args: {
17
+ /** the chapter on screen */
18
+ chapter: Chapter;
19
+ /** the ends of the rule, as the film writes them; empty when the rule is time */
20
+ labels?: [string, string];
21
+ marks: RailMark[];
22
+ /** cut to a chapter's head */
23
+ pick: (head: number) => void;
24
+ /** the readout riding the head — the year, or nothing */
25
+ readout?: string;
26
+ };
27
+ }
28
+ /**
29
+ * THE FILM ON ONE LINE. A rule the width of the chapter strip, the run
30
+ * so far filled in the accent, a dot on the head and the readout riding
31
+ * it; the chapters are dots at the places they open, so the distance
32
+ * between them is a fact and not a layout. The dots are the doors into
33
+ * the chapters. The head's position is a custom property (`--cf-head`)
34
+ * written by the film every frame, so nothing here re-renders on the
35
+ * clock.
36
+ */
37
+ export declare class Rail extends Component<RailSignature> {
38
+ atStyle: (m: RailMark) => string;
39
+ }
40
+ //# sourceMappingURL=rail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rail.d.ts","sourceRoot":"","sources":["../../src/film/rail.gts"],"names":[],"mappings":"AAqFA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,sCAAsC;AACtC,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,4BAA4B;QAC5B,OAAO,EAAE,OAAO,CAAC;QACjB,iFAAiF;QACjF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,8BAA8B;QAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,yDAAyD;QACzD,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,qBAAa,IAAK,SAAQ,SAAS,CAAC,aAAa,CAAC;IAChD,OAAO,GAAI,GAAG,QAAQ,KAAG,MAAM,CACyB;CAiIzD"}