/proto · page_extra.proto

page_extra.proto

Cold, optional page data. A renderer can paint page.proto without this file.

Messages
10
Enums
2
Fields
33
Source
3.2 KB
Imports
1
TargetKind enum · 5 values
Cold, optional page data. A renderer can paint page.proto without this file. Fetch this sidecar only for slideshow/runtime interactions, rich hover behavior, sound cues, or edit workflows that need source metadata not needed at first paint.
# name notes
0 TARGET_KIND_UNSPECIFIED
1 TARGET_KIND_ELEMENT
2 TARGET_KIND_TEXT_RUN
3 TARGET_KIND_ZONE
4 TARGET_KIND_PAGE
TargetRef message · 5 fields
# label type name notes
1 single TargetKind kind
2 optional uint32 element_id Page element id from page.proto. For text runs this is the owning TextBox id.
3 optional uint32 paragraph_index Sparse structural address inside a TextBox. Kept out of page.proto so runs do not need stable ids unless they actually have cold metadata.
4 optional uint32 run_index
5 repeated sint32 b Packed hit zone: [left, top, width, height, z] in page milli-pixels. Used only for link/hover zones that do not correspond to a visual element. [packed = true]
TriggerKind enum · 6 values
# name notes
0 TRIGGER_KIND_UNSPECIFIED
1 TRIGGER_KIND_CLICK
2 TRIGGER_KIND_HOVER_IN
3 TRIGGER_KIND_HOVER_OUT
4 TRIGGER_KIND_FOCUS
5 TRIGGER_KIND_LOAD
TooltipAction message · 1 field
# label type name notes
1 single string text
SoundAction message · 3 fields
# label type name notes
1 optional string src
2 optional bytes hash
3 optional int32 volume_milli
StylePatchAction message · 2 fields
1000 = authored/default volume.
# label type name notes
1 optional string css_text Deliberately cold and CSS-oriented. Renderers may ignore unsupported declarations without affecting first paint.
2 optional uint32 class_id
InteractionAction message · 4 fields
# label type name notes
1 single NavigationAction navigation oneof action
2 single TooltipAction tooltip oneof action
3 single SoundAction sound oneof action
4 single StylePatchAction style_patch oneof action
Interaction message · 4 fields
# label type name notes
1 single TargetRef target
2 single TriggerKind trigger
3 repeated InteractionAction actions
4 optional uint32 flags Runtime/editor hints: 0x01 = stop propagation 0x02 = prevent default browser behavior 0x04 = initially disabled
FieldBinding message · 5 fields
# label type name notes
1 single TargetRef target
2 optional string field_id Canonical metadata for dynamic text fields. page.proto keeps the authored snapshot text in the run itself; this cold metadata is only needed for live substitution, editing, or export.
3 optional string field_type
4 optional string field_kind
5 optional string field_format
ExtraBlobRef message · 2 fields
# label type name notes
1 single uint32 type Family-specific cold payload. For example, animation table, source XML, audit/diagnostic payload, or a future typed editor model.
2 single bytes hash
PageExtra message · 4 fields
# label type name notes
1 optional bytes page_hash Binds this sidecar to the exact core page bytes. Use BLAKE3-128.
10 repeated Interaction interactions
11 repeated FieldBinding field_bindings
20 repeated ExtraBlobRef blobs

§Raw schema

syntax = "proto3";

package eddocu.page.extra.v3;

import "css_enums.proto";

// Cold, optional page data. A renderer can paint page.proto without this file.
// Fetch this sidecar only for slideshow/runtime interactions, rich hover
// behavior, sound cues, or edit workflows that need source metadata not needed
// at first paint.

enum TargetKind {
  TARGET_KIND_UNSPECIFIED = 0;
  TARGET_KIND_ELEMENT = 1;
  TARGET_KIND_TEXT_RUN = 2;
  TARGET_KIND_ZONE = 3;
  TARGET_KIND_PAGE = 4;
}

message TargetRef {
  TargetKind kind = 1;

  // Page element id from page.proto. For text runs this is the owning TextBox id.
  optional uint32 element_id = 2;

  // Sparse structural address inside a TextBox. Kept out of page.proto so runs
  // do not need stable ids unless they actually have cold metadata.
  optional uint32 paragraph_index = 3;
  optional uint32 run_index = 4;

  // Packed hit zone: [left, top, width, height, z] in page milli-pixels.
  // Used only for link/hover zones that do not correspond to a visual element.
  repeated sint32 b = 5 [packed = true];
}

enum TriggerKind {
  TRIGGER_KIND_UNSPECIFIED = 0;
  TRIGGER_KIND_CLICK = 1;
  TRIGGER_KIND_HOVER_IN = 2;
  TRIGGER_KIND_HOVER_OUT = 3;
  TRIGGER_KIND_FOCUS = 4;
  TRIGGER_KIND_LOAD = 5;
}

message NavigationAction {
  optional string href = 1;
  optional eddocu.page.v3.LinkType link_type = 2;

  // Compact decoded source action such as "show:next", "slide:3",
  // "macro:RunMe", or "ppaction://hlinkshowjump?jump=nextslide".
  optional string action = 3;
}

message TooltipAction {
  string text = 1;
}

message SoundAction {
  optional string src = 1;
  optional bytes hash = 2;
  optional int32 volume_milli = 3; // 1000 = authored/default volume.
}

message StylePatchAction {
  // Deliberately cold and CSS-oriented. Renderers may ignore unsupported
  // declarations without affecting first paint.
  optional string css_text = 1;
  optional uint32 class_id = 2;
}

message InteractionAction {
  oneof action {
    NavigationAction navigation = 1;
    TooltipAction tooltip = 2;
    SoundAction sound = 3;
    StylePatchAction style_patch = 4;
  }
}

message Interaction {
  TargetRef target = 1;
  TriggerKind trigger = 2;
  repeated InteractionAction actions = 3;

  // Runtime/editor hints:
  // 0x01 = stop propagation
  // 0x02 = prevent default browser behavior
  // 0x04 = initially disabled
  optional uint32 flags = 4;
}

message FieldBinding {
  TargetRef target = 1;

  // Canonical metadata for dynamic text fields. page.proto keeps the authored
  // snapshot text in the run itself; this cold metadata is only needed for live
  // substitution, editing, or export.
  optional string field_id = 2;
  optional string field_type = 3;
  optional string field_kind = 4;
  optional string field_format = 5;
}

message ExtraBlobRef {
  // Family-specific cold payload. For example, animation table, source XML,
  // audit/diagnostic payload, or a future typed editor model.
  uint32 type = 1;
  bytes hash = 2;
}

message PageExtra {
  // Binds this sidecar to the exact core page bytes. Use BLAKE3-128.
  optional bytes page_hash = 1;

  repeated Interaction interactions = 10;
  repeated FieldBinding field_bindings = 11;
  repeated ExtraBlobRef blobs = 20;
}