Skip to content

filmopen_ui

Generated by scripts/package_digest.py; regenerate, never edit.

The theme (buildTheme, AppColors, Breakpoints) and the widgets more than one page shares: SectionCard, InfoChip, EmptyState, showMessage, AttributeView, ScreenplayView (one scene or many as a read-only screenplay page on a US Letter page’s margins, mentions read through the reference codec, no block id shown), SceneGrid (one card per scene, striped by AppColors.sceneStripe), the split view, ShortNameField, StageSelector (Prototype, Draft and Final over a value and a callback: the media card’s stage and the render dialog’s), EditableComboBox (a text box with suggested words, any words typed kept; a caller may build its field — a prose editor — through fieldBuilder, the box keeping its menu, its arrow and Down), the logo, the genre picker, the entity icons, the media image, DashedBorderPainter (a rounded border of 6 px dashes and 4 px gaps).

Flutter. 27 files, 3,129 lines under lib/; 52 tests in 13 files. Barrel: lib/filmopen_ui.dart.

  • filmopen_format — uses AssetMedia, BytesMedia, EntityType, FileMedia, MediaLocation, MediaStage, ReferenceCodec, ReferenceToken, SceneCard, ScriptBlock, ShortName, ShortNameProblem, blockLineOf, recommendedGenres, splitDirection
  • filmopen_l10n — uses fieldLabel

filmopen_account, filmopen_app, filmopen_assistant_ui, filmopen_browser, filmopen_compare, filmopen_dictation, filmopen_forms, filmopen_insertion_ui, filmopen_jobs_ui, filmopen_keys, filmopen_media_ui, filmopen_picker, filmopen_plugin_dev, filmopen_plugins_ui, filmopen_prompt_ui, filmopen_relay, filmopen_render_ui, filmopen_sharing, filmopen_support, filmopen_text_ui, filmopen_timeline_ui, filmopen_tree

What the barrel exports, file by file. A name is class, enum, mixin, extension, typedef, a top-level function, getter, setter or variable; under a class, its public constructors, fields, getters, setters and methods.

  • class AttributeView — Renders any JSON object attribute by attribute: nested objects indent, lists of primitives become chips, lists of objects become cards.
    • const AttributeView({super.key, required this.data, this.hiddenKeys = const {}, this.labels = const {}})
    • final Map<String, dynamic> data
    • final Set<String> hiddenKeys
    • final Map<String, String> labels — A label of the caller’s for a key, where a page names that key otherwise than the vocabulary does (a project’s kind is its Type of project); the raw key still shows on hover.
    • static Map<String, dynamic> visible(Map<String, dynamic> data, Set<String> hidden) — [data] without [hidden], dotted paths included.
  • class AttributeValue — One JSON value of any shape.
    • const AttributeValue(this.value, {super.key})
    • final dynamic value
  • class ChromeInsets — The room the window’s floating chrome takes at the top of the page: the menu button at the start, below Breakpoints.treeInDrawer of window, and the assistant’s portrait at the end, below `Breakpoints.assistantDocked…
    • const ChromeInsets({super.key, this.start = 0, this.end = 0, required super.child}) — Provides [start] and [end] to [child].
    • const ChromeInsets.none({super.key, required super.child}) — [child] with no chrome above it on either side.
    • static const double button — What a floating control takes beside the first row: a button with its 48 px tap target on a phone, and 4 px either side of it.
    • final double start — The room at the start, where the menu button floats.
    • final double end — The room at the end, where the assistant’s portrait floats.
    • static ChromeInsets? maybeOf(BuildContext context) — The insets above [context]: none where nothing provides them.
    • static EdgeInsetsDirectional clearance(BuildContext context, {double within = 0}) — The padding a first row adds to clear the chrome, [within] being the room already between it and the edges.
    • static Widget only(BuildContext context, {bool start = true, bool end = true, required Widget child}) — [child] given these insets with [start] or [end] taken away: a region that does not reach that edge.
  • class ChromeClearance — A screen’s first visible row, padded to clear the floating chrome above it (§9.1).
    • const ChromeClearance({super.key, this.within = 0, this.enabled = true, required this.child}) — Pads [child] by what [within] — the room its parent already leaves at either edge — does not clear; nothing where [enabled] is false, the row not being the first.
    • final double within — The room already between the row and the edges of its region.
    • final bool enabled — Whether the row is the first of its screen: a row that only sometimes is says so here.
    • final Widget child — The row.
  • class DashedBorderPainter — A rounded rectangle’s border drawn in dashes of [dash] px and gaps of [gap] px, in [color] and [width].
    • const DashedBorderPainter({required this.color, this.width = 1, this.radius = 6, this.dash = 6, this.gap = 4})
    • final Color color — The stroke’s colour.
    • final double width — The stroke’s width in pixels.
    • final double radius — The corners’ radius, at the stroke’s outer edge.
    • final double dash — Each dash’s length in pixels.
    • final double gap — The gap after each dash in pixels.
  • typedef typedef ComboFieldBuilder — Draws an [EditableComboBox]’s field with the box’s focus node, decoration and arrow.
  • class EditableComboBox — A text box with suggested words: any words may be typed, and a suggestion fills the box as typing would.
    • const EditableComboBox({ super.key, required this.controller, required this.suggestions, required this.onChanged, this.decoration = const InputDeco…
    • final TextEditingController controller — The box’s text, which a choice replaces.
    • final List<String> suggestions — The words offered, in their order; words the box holds that are none of them stay as they are.
    • final ValueChanged<String> onChanged — Every change of the box’s text, typed or chosen.
    • final InputDecoration decoration — The caller’s decoration; the arrow goes after its suffix.
    • final bool other — Whether Other ends the list: it puts the caret in the box and writes nothing.
    • final bool readOnly — Whether the box may not be typed into; a box read only has no arrow.
    • final String? identifier — The box’s identifier, which the arrow’s (<identifier>.suggestions) and the menu’s (<identifier>.suggestion.<n>, from 1, and <identifier>.other) follow; none where null.
    • final TextStyle? style — The style of the box’s words.
    • final FocusNode? focusNode — The box’s focus, where the caller keeps it.
    • final ComboFieldBuilder? fieldBuilder — Draws the box’s field in place of a plain text field.
    • final bool Function()? fieldTakesDown — Whether the [fieldBuilder]’s field answers Down itself now.
  • class EditableTextSelection — A captured text selection in UTF-16 offsets, retaining its base and extent direction.
    • const EditableTextSelection({required this.baseOffset, required this.extentOffset}) — Captures valid offsets without depending on a Flutter controller or widget.
    • final int baseOffset — The UTF-16 offset where the selection began.
    • final int extentOffset — The UTF-16 offset where the selection ends, which may precede the base.
    • int get start — The lower bound of the selected range.
    • int get end — The upper bound of the selected range.
  • class TextEditGeneration — A target identity and revision that reject text arriving for a departed editable generation.
    • const TextEditGeneration(this.target, this.revision) — Captures the stable target identity and its current external-edit revision.
    • final Object target — The target’s opaque identity, compared by identity rather than a counter alone.
    • final int revision — The revision advanced after deletion, target switch or read-only transition.
  • enum TextEditOutcome — The typed result of a provisional or final text edit.
    • values: applied, stale, readOnly, alreadyFinished, rejected
  • class EditableTextTarget — The shared editable-selection contract, independent of a widget, controller or Riverpod.
    • const EditableTextTarget() — Creates an editable target interface without listeners or platform work.
    • EditableTextSelection get selection — The current UTF-16 selection whose direction is retained at capture.
    • TextEditGeneration get generation — The current target identity and external-edit revision.
    • bool get readOnly — Whether every edit is currently refused as read-only.
    • ProvisionalTextEdit capture() — Captures this target, its selection and generation without inserting text.
    • TextEditOutcome updateProvisional(Object span, EditableTextSelection selection, String text) — Replaces the same provisional span while preserving ordinary field validation.
    • TextEditOutcome commitProvisional(Object span, EditableTextSelection selection, String text) — Commits the span as one ordinary validated field edit, preserving caret and undo semantics.
    • TextEditOutcome cancelProvisional(Object span) — Cancels only this generation’s provisional span, retaining unrelated field changes.
  • class ProvisionalTextEdit — One captured provisional edit whose final commit or cancellation can happen only once.
    • final TextEditGeneration generation — The exact target generation captured before asynchronous text work.
    • final EditableTextSelection selection — The exact selection captured before the live caret or selection moves.
    • TextEditOutcome updatePartial(String text) — Replaces the captured provisional span, refusing late text or a finished handle.
    • TextEditOutcome commit(String text) — Commits once, sealing before callback execution so reentrancy or a throw cannot duplicate it.
    • TextEditOutcome cancel() — Cancels once, sealing before callback execution and never touching a stale target’s span.
  • class EmptyState — A centred icon and message for panes with nothing to show.
    • const EmptyState({super.key, required this.icon, required this.message, this.detail})
    • final IconData icon
    • final String message
    • final String? detail
  • function IconData iconFor(EntityType type) — Icons per entity type, shared by the tree and the detail pane.
  • class FilmOpenLogo — The FilmOpen clapperboard, from assets/branding/ (derived from the master in assets/branding/source/ by scripts/make_icons.py, which also writes the Windows and web icons).
    • const FilmOpenLogo({super.key, this.size = 24})
    • final double size
  • class GenrePicker — A pull-down of check boxes for the project’s genres (Appendix A.9).
    • const GenrePicker({super.key, required this.selected, required this.onChanged, this.enabled = true, this.comparing = false})
    • final List<String> selected
    • final ValueChanged<List<String>> onChanged
    • final bool enabled
    • final bool comparing — Whether the box is a comparison’s (§9.3): its label above it, and nothing in it when empty.
  • class IdentifierScope — A namespace for the semantics identifiers of the controls under it, where one page draws the same file’s controls more than once — the columns of an assistant session’s review (§9.3) — so every identifier stays unique…
    • const IdentifierScope({super.key, required this.namespace, required super.child}) — Puts [namespace] before the identifiers [scopedId] gives under [child].
    • final String namespace — The namespace, without its trailing dot (compare[2].left).
    • static String? of(BuildContext context) — The namespace in force at [context], or null outside any.
  • function String scopedId(BuildContext context, String identifier) — [identifier] under the [IdentifierScope] in force at [context] (<namespace>.<identifier>), or as it is outside one.
  • class InfoChip — A small, read-only pill: a tag, an author, an epoch, a version.
    • const InfoChip(this.label, { super.key, this.icon, this.tooltip, this.mono = false, this.emphasis = false, this.outlined = false, this.onTap, })
    • final String label
    • final IconData? icon
    • final String? tooltip
    • final bool mono — Monospace, for stems and tags.
    • final bool emphasis — Filled with the primary container colour.
    • final bool outlined — Outlined, for a chip sitting on a ground of its own colour.
    • final VoidCallback? onTap
  • function ImageProvider? imageProviderFor(MediaLocation? location) — Turns a model-layer [MediaLocation] into something Flutter can paint.
  • variable const Duration kLongMessage — How long a message to act on or to read through stays, at least, where it has an action.
  • function void showMessage(BuildContext context, String text, { String? actionLabel, VoidCallback? onAction, String? actionIdentifier, double width = 420, Du… — One place for the app’s transient messages: a floating snackbar, optionally with one action.
  • function void showMessageOn(ScaffoldMessengerState messenger, String text, { String? actionLabel, VoidCallback? onAction, String? actionIdentifier, double w… — Shows a message on a messenger retained before an awaited change rebuilt its page.
  • class PinnedSection — A sliver of one section of a list, its opaque [title] pinned at the top until the next section’s pushes it off.
    • const PinnedSection({super.key, required this.title, required this.body, this.pinned = true}) — A section of [title] over [body], null where the section is its title alone; the title pinned while [pinned].
    • final Widget title — The section’s heading, measured as drawn; it should be opaque, since the body passes under it.
    • final Widget? body — One box that scrolls under the title; null where the section is its title alone.
    • final bool pinned — Whether the title stays at the top; false on a pane too short to give it room.
  • class SceneGridEntry — One scene of a grid: what to draw, and what to do when it is chosen.
    • const SceneGridEntry({ required this.card, required this.cast, required this.identifier, this.mentionName, this.onOpen, this.section, this.sectionS…
    • final SceneCard card — The board’s facts, read from the scene’s file.
    • final List<String> cast — The scene’s speakers by name, already resolved: the grid resolves nothing itself.
    • final String identifier — The card’s Semantics identifier, unique on its page, by which an agent opens the scene.
    • final String? Function(ReferenceToken token)? mentionName — The words that replace a mention in the card’s first words, or null to leave it as written.
    • final VoidCallback? onOpen — Opens the scene, where the grid’s page can open one.
    • final String? section — The folders this scene is in, named: Act 3: John comes home; null at the top of the script.
    • final bool sectionStarts — Whether the folders this scene is in differ from the scene’s before it, so that a new run of cards starts here.
  • class SceneGrid — A film’s scenes as a production’s board: one card each, striped by where and when they play (§9.3).
    • const SceneGrid({super.key, required this.entries, this.emptyDetail})
    • final List<SceneGridEntry> entries — The scenes’ cards, in the order the script reads them.
    • final String? emptyDetail — What would fill an empty grid, where its page knows better than the default.
  • class ScreenplayScene — One scene of a screenplay page: its heading, if it has one, and its blocks (§10.3).
    • const ScreenplayScene({required this.blocks, required this.characterName, this.mentionName, this.heading, this.number, this.section, this.sectionSt…
    • final List<Map<String, dynamic>> blocks — The scene’s blocks in reading order.
    • final String Function(String tag) characterName — Resolves a character tag to its display name, in this scene’s own world (§6.1).
    • final String? Function(ReferenceToken token)? mentionName — The words that replace a mention in this scene’s text, or null to leave it exactly as written.
    • final String? heading — The slug line as the screenplay writes it, such as `INT.
    • final String? number — The production’s number for the scene, shown at both margins as a shooting script does.
    • final String? section — The folders this scene is in, named: Act 3: John comes home; null at the top of the script.
    • final bool sectionStarts — Whether the folders this scene is in differ from the scene’s before it, so that a section starts here.
  • class ScreenplayView — The blocks of a screenplay laid out as a page (§10.3, §10.4).
    • const ScreenplayView({super.key, required this.scenes, this.emptyDetail})
    • ScreenplayView.single({Key? key, required List<Map<String, dynamic>> blocks, required String Function(String tag) characterName, String? Function(R… — One scene’s blocks as a page of their own, which is what a scene’s own tab shows.
    • final List<ScreenplayScene> scenes — The scenes to lay out, in the order the film reads them.
    • final String? emptyDetail — What would fill an empty page, where its page knows better than the default: where its words are written.
  • function String resolveMentions(String text, String? Function(ReferenceToken token) nameOf) — [text] with every mention the reference grammar reads replaced by what [nameOf] answers for it (§5).
  • enum TimelineColouring — What a reading timeline’s blocks are coloured by (§9.3).
    • values: board, location
  • enum TimelineRule — Which rule gave a reading timeline its widths (§9.3).
    • values: scaled, median, equal, empty
  • enum TimelineBasis — Where one scene’s width came from.
    • values: known, median, equal
  • class TimelineLayout — The widths of a reading timeline’s scenes, worked out once and read by the strip and every lane (§9.3).
    • static const double minimumBlock — The narrowest a scene is drawn: below it a block’s tooltip, the only place its identity is, cannot be reached.
    • factory TimelineLayout.of(List<SceneCard> cards, double room) — Lays [cards] out in [room] pixels, by their page lengths.
    • final List<double> eighths — Each scene’s page length in eighths, as imported; zero where it is unknown.
    • final List<double> widths — Each scene’s width in pixels, the one array the strip and every lane read.
    • final List<TimelineBasis> basis — Where each scene’s width came from.
    • final TimelineRule rule — The rule the widths were given by.
    • final double? medianEighths — The median known length in eighths, which an unknown one takes; null where none is known.
    • final double scale — Pixels per eighth; pixels per scene where the rule is [TimelineRule.equal].
    • final double room — The pixels the strip was given, which it fills or exceeds.
    • double get width — The strip’s whole width.
    • int get unknown — How many scenes have no length of their own.
  • class TimelineScene — One scene on a reading timeline: its facts and where a tap takes the reader.
    • const TimelineScene({ required this.card, required this.identifier, this.location = '', this.locationName = '', this.onOpen, }) — A scene drawn from [card], its block identified by [identifier] for an agent.
    • final SceneCard card — The scene’s facts, its page length among them.
    • final String identifier — The block’s semantics identifier, unique on the page.
    • final String location — The location the scene names, by tag; empty where it names none.
    • final String locationName — The location’s name as the reader’s world resolves it, said in the tooltip; empty where the scene names none.
    • final VoidCallback? onOpen — Opens the scene.
  • class TimelineLane — One character’s lane: where they appear, keyed by their tag and labelled by their name (§9.3).
    • const TimelineLane({required this.tag, required this.label, required this.scenes}) — The lane of the character [tag], named [label], in the scenes at the indices given.
    • final String tag — The character’s tag: two characters of one name are two lanes.
    • final String label — The name the character resolves to.
    • final Set<int> scenes — The indices of the scenes the character is in.
  • class ScriptTimeline — The whole film on one strip, each scene as wide as its imported page length, and a lane per character (§9.3).
    • const ScriptTimeline({ super.key, required this.scenes, required this.layout, this.lanes = const [], this.colouring = TimelineColouring.board, this… — A timeline of [scenes], laid out by [layout], with [lanes] beneath and coloured by [colouring].
    • final List<TimelineScene> scenes — The scenes, in script order.
    • final TimelineLayout Function(double pane) layout — The widths for a pane of the width given; [roomOf] says how much of it the strip has.
    • final List<TimelineLane> lanes — The characters’ lanes, in the order drawn.
    • final TimelineColouring colouring — What the blocks are coloured by.
    • final ValueChanged<TimelineColouring>? onColouring — Chooses another colouring; with none, no choice is offered.
    • final String? emptyDetail — What would fill an empty timeline, where its page knows better than the default.
    • static const double labelWidth — The room a lane’s name takes, left of the strips.
    • static double roomOf(double pane) — The strip’s room in a pane [pane] pixels wide: the pane less its padding and the lanes’ names.
  • class SectionCard — A titled card grouping related content in the detail pane.
    • const SectionCard({ super.key, required this.title, required this.child, this.trailing, this.titleRow, this.icon, this.subtitle, this.padding = con…
    • final String title
    • final Widget child
    • final Widget? trailing
    • final String? subtitle — A line under the title saying what the card holds, muted and wrapping; null draws none.
    • final IconData? icon — A small badge before the title: what the card is about, at a glance.
    • final Widget? titleRow — Drawn instead of the title and [trailing], for a card whose title row is laid out on another grid.
    • final EdgeInsets padding — Tightened where two of these sit side by side (§9.3, Compare).
  • class DisclosureCard — A titled card that folds its content away: a press anywhere on its title row opens or closes it.
    • const DisclosureCard({ super.key, required this.title, required this.open, required this.onToggle, required this.child, this.identifier, })
    • final String title
    • final bool open
    • final VoidCallback onToggle
    • final Widget child — The content, built only while [open].
    • final String? identifier — The title row’s semantics identifier, by which an agent opens or closes it.
  • class KeyValueRow — A label on the left, a value on the right.
    • const KeyValueRow(this.label, this.value, {super.key, this.labelWidth = 140, this.tooltip})
    • final String label
    • final Widget value
    • final double labelWidth
    • final String? tooltip
  • class ShortNameField — An input box that validates a segment or a person’s handle and names its bound.
    • const ShortNameField({ super.key, this.initialValue = '', required this.onChanged, this.label, this.hintText, this.hintAtRest = false, this.helperT… — Creates a segment box, a handle box when [allowWorkspace] is true, or a username box when [username] is.
    • final String initialValue — The text the box opens with, validated before the first edit when nonempty.
    • final ValueChanged<String> onChanged — Called with the filtered text on every change.
    • final String? label — The box’s label, or the localized short-name label when absent.
    • final String? hintText — Shown in the empty box — what an empty box stands for, or an example — and never a value of its own.
    • final bool hintAtRest — Whether [hintText] shows at rest, with the label always above it.
    • final String? helperText — Shown when there is nothing to warn about, using the format’s rule when null.
    • final int helperMaxLines — How many lines the helper may take before it is cut.
    • final bool autofocus — Whether the box requests focus when it opens.
    • final ValueChanged<String>? onSubmitted — The callback for submitting the box’s current text.
    • final bool allowWorkspace — Accept a person’s handle: a username (3 to 32 characters) and an optional workspace of up to 20.
    • final bool username — Accept a person’s username alone, 3 to 32 characters (§5.6), with its rule as the helper.
    • final bool emptyAllowed — Whether an empty box is a legitimate answer rather than a problem.
    • final IconData prefixIcon — The icon at the box’s left.
    • final Widget? Function(BuildContext context, ShortNameBox box)? suffixBuilder — Builds what goes at the box’s right using the box’s own rules.
    • static ShortNameProblem? validate(String value, { bool allowWorkspace = false, bool username = false, }) — The problem with [value] under this field’s rule, or null when valid.
    • static bool isValid(String value, {bool allowWorkspace = false, bool username = false}) — Whether [value] is valid under the segment, person-handle or username rule.
    • static String problemText(AppLocalizations l10n, ShortNameProblem problem, { int maxLength = ShortName.maxLength, }) — The sentence for a validation problem, naming [maxLength] for a long part.
  • class ShortNameBox — The text and typing rules a [ShortNameField] hands the widget at its right.
    • const ShortNameBox({ required this.controller, required this.formatters, required this.maxLength, required this.onChanged, }) — Creates the suffix widget’s access to the box’s text and rules.
    • final TextEditingController controller — The controller holding the box’s current text.
    • final List<TextInputFormatter> formatters — The formatters the box applies when typing.
    • final int maxLength — The total counter bound: 53 for a person’s handle, 32 for a username or a segment.
    • final ValueChanged<String> onChanged — The field’s own change callback, which checks the name and reports it.
  • variable const Duration kSlideOutDuration — How long a slide-out takes to come in or go.
  • class SlideOut — A panel that slides in over the page from the window’s start or end edge, over a scrim that dims the page, and is taken away by a tap on the scrim (§9.1).
    • const SlideOut({ super.key, required this.open, required this.width, required this.onDismiss, this.end = false, required this.child, }) — Places [child], [width] wide, at the start edge, or the end edge where [end] is set.
    • final bool open — Whether the panel is in view.
    • final double width — The panel’s width.
    • final VoidCallback onDismiss — A tap on the scrim: the owner closes the panel and says why.
    • final bool end — Whether the panel comes from the end edge rather than the start.
    • final Widget child — What the panel holds.
  • class SidebarSplitView — A resizable side panel beside a main area, with a thin draggable divider: the tree at the start, the docked assistant at the end (§9.1).
    • const SidebarSplitView({ super.key, required this.sidebar, required this.main, required this.sidebarWidth, this.onSidebarResized, this.minWidth = m…
    • final Widget? sidebar — The side panel, or none, which draws [main] alone as the same element.
    • final Widget main — The main area beside it, which takes the rest of the width.
    • final double sidebarWidth — The panel’s width as the person last chose it, which seeds the view once.
    • final ValueChanged<double>? onSidebarResized — Called with the width the person settled on, at the end of a drag.
    • final double minWidth — The narrowest the panel is, whatever the person drags or the window leaves it.
    • final double maxWidth — The widest the panel is laid out, whatever the person drags.
    • final double mainMinWidth — The main area’s floor, which the panel gives way to at layout down to [minWidth].
    • final bool sidebarAtEnd — Whether the panel stands at the end edge rather than the start.
    • static const double minSidebarWidth — The tree’s narrowest, which the page’s floor never takes from it.
    • static const double maxSidebarWidth — The tree’s widest.
    • static const double dividerWidth — The divider’s thickness.
    • static double laidWidth({ required double width, required double available, double min = minSidebarWidth, double max = maxSidebarWidth, double main… — The panel’s width at layout: [width] within [min] and [max], and given way to [mainMin] of [available] down to [min] — the one rule the view lays out by and the frame’s log reports.
  • class StageSelector — Prototype, Draft and Final as one three-position control over a value its owner keeps; held without [onChanged].
    • const StageSelector({super.key, required this.value, required this.onChanged, required this.identifier, this.heldReason}) — The selector at [value], answering a tap through [onChanged], identified as [identifier].
    • final MediaStage value — The stage shown chosen.
    • final ValueChanged<MediaStage>? onChanged — Answers the stage tapped — the one in force when it is tapped again; null holds the control.
    • final String identifier — The control’s semantics identifier, each segment’s the same with its stage’s token after a dot.
    • final String? heldReason — Why the control is held, put before every segment’s tooltip, as every held control says why (§9.3).
  • class Breakpoints — Where the layout changes (§9.1).
    • static const double treeInDrawer — Below this window width the tree is a drawer and the detail pane has the page to itself.
    • static const double singleColumn — Below this pane width a form puts one field on a row, whatever width the field asked for.
    • static const double compareTight — Below this width a comparison gives away its padding — the page’s and the cards’ — so that two columns still fit side by side.
    • static const double compareScrolls — And below this one there is nothing left to give: the comparison scrolls sideways instead.
    • static const double labelAbove — Below this a label sits above its value rather than beside it.
    • static const double overviewTwoColumns — Below this the project overview puts its cards in one column.
    • static const double card — How wide a card in a grid of them wants to be.
    • static const double treeHeaderFull — Below this the tree’s header puts the viewer’s handle under the project’s name rather than beside it.
    • static const double sceneCard — The narrowest a scene card may be before the scene grid gives up a column, measured on the pane (§9.3).
    • static const double segmentsCompact — Below this card width Settings’ segmented buttons show labels alone, without icons or the selected check.
    • static const double stageLabelled — Below this room the stage selector says each stage by its initial, the word in its semantics: the three words want about 280 px, every segment being as wide as the widest ([segmentsCompact]’s reasoning); the initi…
    • static const double browseIconOnly — Below this row width New project’s Browse… shows its icon alone, its name its tooltip, so that the parent folder’s box beside it keeps room for a path: the whole button takes about 124 px, which leaves a 375 p…
    • static const double assistantDocked — From this window width the AI assistant is a panel docked at the window’s right, full height and resizable; below it, its portrait floats at the upper right and slides the panel in over the page.
    • static const double pageMin — The page width a side panel never takes: the docked assistant gives way first, down to its minimum, then the tree, down to its own.
    • static const double bodyKeepsHeight — Heights, not widths, and the only two here.
    • static const double headingsStayPut — Below this much height a comparison’s column headings scroll with its rows instead of standing above them, for the same reason.
    • static const double headerKeepsHeight — And what the header keeps for itself on a page too short for both, so that it is cut — with a bar to say so — rather than gone.
  • function ThemeData buildTheme(Brightness brightness) — The application theme: Material 3, compact, one seed colour.
  • class AppColors — Semantic colours the Material scheme does not name.
    • const AppColors({ required this.official, required this.positive, required this.locked, required this.caution, required this.prototype, required th…
    • final Color official — The star on the version an official pointer names.
    • final Color positive — A positive rating in commentary, and money received.
    • final Color locked — The ground of a field the reader may not change (§9.3).
    • final Color caution — Amber, for what works less well than it could: a plug-in’s degraded state, its clean-up not confirmed.
    • final Color prototype — Blue, for a render made at the prototype stage: a tile’s border (§9.3), where green says draft and final.
    • final Color interiorDay — A scene card’s stripe for an interior by day (§9.3).
    • final Color interiorNight — A scene card’s stripe for an interior at night.
    • final Color exteriorDay — A scene card’s stripe for an exterior by day.
    • final Color exteriorNight — A scene card’s stripe for an exterior at night.
    • Color? sceneStripe(SceneCard card) — The one rule a scene is striped by, wherever a scene is drawn by where and when it plays (§9.3); null where the file does not say, which the caller draws neutral.
    • static AppColors of(BuildContext context)
  • variable const List<String> kMonoFontFallback — The monospace stack used for stems, JSON and screenplay text.

Files under lib/ the barrel does not reach; nothing outside the package may import them.

  • lib/src/file_image.dart
  • lib/src/file_image_io.dart: fileImageFor
  • lib/src/file_image_stub.dart: fileImageFor