@aigne/afs-ui 1.11.0-beta.12

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 (196) hide show
  1. package/LICENSE.md +26 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  4. package/dist/aup-protocol.cjs +235 -0
  5. package/dist/aup-protocol.d.cts +78 -0
  6. package/dist/aup-protocol.d.cts.map +1 -0
  7. package/dist/aup-protocol.d.mts +78 -0
  8. package/dist/aup-protocol.d.mts.map +1 -0
  9. package/dist/aup-protocol.mjs +235 -0
  10. package/dist/aup-protocol.mjs.map +1 -0
  11. package/dist/aup-registry.cjs +2489 -0
  12. package/dist/aup-registry.mjs +2487 -0
  13. package/dist/aup-registry.mjs.map +1 -0
  14. package/dist/aup-spec.cjs +1467 -0
  15. package/dist/aup-spec.mjs +1466 -0
  16. package/dist/aup-spec.mjs.map +1 -0
  17. package/dist/aup-types.cjs +165 -0
  18. package/dist/aup-types.d.cts +157 -0
  19. package/dist/aup-types.d.cts.map +1 -0
  20. package/dist/aup-types.d.mts +157 -0
  21. package/dist/aup-types.d.mts.map +1 -0
  22. package/dist/aup-types.mjs +157 -0
  23. package/dist/aup-types.mjs.map +1 -0
  24. package/dist/backend.cjs +14 -0
  25. package/dist/backend.d.cts +104 -0
  26. package/dist/backend.d.cts.map +1 -0
  27. package/dist/backend.d.mts +104 -0
  28. package/dist/backend.d.mts.map +1 -0
  29. package/dist/backend.mjs +13 -0
  30. package/dist/backend.mjs.map +1 -0
  31. package/dist/degradation.cjs +85 -0
  32. package/dist/degradation.d.cts +17 -0
  33. package/dist/degradation.d.cts.map +1 -0
  34. package/dist/degradation.d.mts +17 -0
  35. package/dist/degradation.d.mts.map +1 -0
  36. package/dist/degradation.mjs +84 -0
  37. package/dist/degradation.mjs.map +1 -0
  38. package/dist/index.cjs +36 -0
  39. package/dist/index.d.cts +12 -0
  40. package/dist/index.d.mts +12 -0
  41. package/dist/index.mjs +13 -0
  42. package/dist/runtime.cjs +117 -0
  43. package/dist/runtime.d.cts +59 -0
  44. package/dist/runtime.d.cts.map +1 -0
  45. package/dist/runtime.d.mts +59 -0
  46. package/dist/runtime.d.mts.map +1 -0
  47. package/dist/runtime.mjs +118 -0
  48. package/dist/runtime.mjs.map +1 -0
  49. package/dist/session.cjs +159 -0
  50. package/dist/session.d.cts +80 -0
  51. package/dist/session.d.cts.map +1 -0
  52. package/dist/session.d.mts +80 -0
  53. package/dist/session.d.mts.map +1 -0
  54. package/dist/session.mjs +159 -0
  55. package/dist/session.mjs.map +1 -0
  56. package/dist/snapshot.cjs +162 -0
  57. package/dist/snapshot.mjs +163 -0
  58. package/dist/snapshot.mjs.map +1 -0
  59. package/dist/term-page.cjs +264 -0
  60. package/dist/term-page.mjs +264 -0
  61. package/dist/term-page.mjs.map +1 -0
  62. package/dist/term.cjs +295 -0
  63. package/dist/term.d.cts +84 -0
  64. package/dist/term.d.cts.map +1 -0
  65. package/dist/term.d.mts +84 -0
  66. package/dist/term.d.mts.map +1 -0
  67. package/dist/term.mjs +296 -0
  68. package/dist/term.mjs.map +1 -0
  69. package/dist/tty.cjs +136 -0
  70. package/dist/tty.d.cts +53 -0
  71. package/dist/tty.d.cts.map +1 -0
  72. package/dist/tty.d.mts +53 -0
  73. package/dist/tty.d.mts.map +1 -0
  74. package/dist/tty.mjs +135 -0
  75. package/dist/tty.mjs.map +1 -0
  76. package/dist/ui-provider.cjs +4615 -0
  77. package/dist/ui-provider.d.cts +307 -0
  78. package/dist/ui-provider.d.cts.map +1 -0
  79. package/dist/ui-provider.d.mts +307 -0
  80. package/dist/ui-provider.d.mts.map +1 -0
  81. package/dist/ui-provider.mjs +4616 -0
  82. package/dist/ui-provider.mjs.map +1 -0
  83. package/dist/web-page/core.cjs +1388 -0
  84. package/dist/web-page/core.mjs +1387 -0
  85. package/dist/web-page/core.mjs.map +1 -0
  86. package/dist/web-page/css.cjs +1699 -0
  87. package/dist/web-page/css.mjs +1698 -0
  88. package/dist/web-page/css.mjs.map +1 -0
  89. package/dist/web-page/icons.cjs +248 -0
  90. package/dist/web-page/icons.mjs +248 -0
  91. package/dist/web-page/icons.mjs.map +1 -0
  92. package/dist/web-page/overlay-themes.cjs +514 -0
  93. package/dist/web-page/overlay-themes.mjs +513 -0
  94. package/dist/web-page/overlay-themes.mjs.map +1 -0
  95. package/dist/web-page/renderers/action.cjs +72 -0
  96. package/dist/web-page/renderers/action.mjs +72 -0
  97. package/dist/web-page/renderers/action.mjs.map +1 -0
  98. package/dist/web-page/renderers/broadcast.cjs +160 -0
  99. package/dist/web-page/renderers/broadcast.mjs +160 -0
  100. package/dist/web-page/renderers/broadcast.mjs.map +1 -0
  101. package/dist/web-page/renderers/calendar.cjs +137 -0
  102. package/dist/web-page/renderers/calendar.mjs +137 -0
  103. package/dist/web-page/renderers/calendar.mjs.map +1 -0
  104. package/dist/web-page/renderers/canvas.cjs +173 -0
  105. package/dist/web-page/renderers/canvas.mjs +173 -0
  106. package/dist/web-page/renderers/canvas.mjs.map +1 -0
  107. package/dist/web-page/renderers/cdn-loader.cjs +25 -0
  108. package/dist/web-page/renderers/cdn-loader.mjs +25 -0
  109. package/dist/web-page/renderers/cdn-loader.mjs.map +1 -0
  110. package/dist/web-page/renderers/chart.cjs +101 -0
  111. package/dist/web-page/renderers/chart.mjs +101 -0
  112. package/dist/web-page/renderers/chart.mjs.map +1 -0
  113. package/dist/web-page/renderers/deck.cjs +390 -0
  114. package/dist/web-page/renderers/deck.mjs +390 -0
  115. package/dist/web-page/renderers/deck.mjs.map +1 -0
  116. package/dist/web-page/renderers/device.cjs +1015 -0
  117. package/dist/web-page/renderers/device.mjs +1015 -0
  118. package/dist/web-page/renderers/device.mjs.map +1 -0
  119. package/dist/web-page/renderers/editor.cjs +127 -0
  120. package/dist/web-page/renderers/editor.mjs +127 -0
  121. package/dist/web-page/renderers/editor.mjs.map +1 -0
  122. package/dist/web-page/renderers/finance-chart.cjs +178 -0
  123. package/dist/web-page/renderers/finance-chart.mjs +178 -0
  124. package/dist/web-page/renderers/finance-chart.mjs.map +1 -0
  125. package/dist/web-page/renderers/frame.cjs +274 -0
  126. package/dist/web-page/renderers/frame.mjs +274 -0
  127. package/dist/web-page/renderers/frame.mjs.map +1 -0
  128. package/dist/web-page/renderers/globe.cjs +119 -0
  129. package/dist/web-page/renderers/globe.mjs +119 -0
  130. package/dist/web-page/renderers/globe.mjs.map +1 -0
  131. package/dist/web-page/renderers/input.cjs +137 -0
  132. package/dist/web-page/renderers/input.mjs +137 -0
  133. package/dist/web-page/renderers/input.mjs.map +1 -0
  134. package/dist/web-page/renderers/list.cjs +1243 -0
  135. package/dist/web-page/renderers/list.mjs +1243 -0
  136. package/dist/web-page/renderers/list.mjs.map +1 -0
  137. package/dist/web-page/renderers/map.cjs +126 -0
  138. package/dist/web-page/renderers/map.mjs +126 -0
  139. package/dist/web-page/renderers/map.mjs.map +1 -0
  140. package/dist/web-page/renderers/media.cjs +106 -0
  141. package/dist/web-page/renderers/media.mjs +106 -0
  142. package/dist/web-page/renderers/media.mjs.map +1 -0
  143. package/dist/web-page/renderers/moonphase.cjs +105 -0
  144. package/dist/web-page/renderers/moonphase.mjs +105 -0
  145. package/dist/web-page/renderers/moonphase.mjs.map +1 -0
  146. package/dist/web-page/renderers/natal-chart.cjs +222 -0
  147. package/dist/web-page/renderers/natal-chart.mjs +222 -0
  148. package/dist/web-page/renderers/natal-chart.mjs.map +1 -0
  149. package/dist/web-page/renderers/overlay.cjs +531 -0
  150. package/dist/web-page/renderers/overlay.mjs +531 -0
  151. package/dist/web-page/renderers/overlay.mjs.map +1 -0
  152. package/dist/web-page/renderers/table.cjs +74 -0
  153. package/dist/web-page/renderers/table.mjs +74 -0
  154. package/dist/web-page/renderers/table.mjs.map +1 -0
  155. package/dist/web-page/renderers/terminal.cjs +30 -0
  156. package/dist/web-page/renderers/terminal.mjs +30 -0
  157. package/dist/web-page/renderers/terminal.mjs.map +1 -0
  158. package/dist/web-page/renderers/text.cjs +109 -0
  159. package/dist/web-page/renderers/text.mjs +109 -0
  160. package/dist/web-page/renderers/text.mjs.map +1 -0
  161. package/dist/web-page/renderers/ticker.cjs +133 -0
  162. package/dist/web-page/renderers/ticker.mjs +133 -0
  163. package/dist/web-page/renderers/ticker.mjs.map +1 -0
  164. package/dist/web-page/renderers/time.cjs +69 -0
  165. package/dist/web-page/renderers/time.mjs +69 -0
  166. package/dist/web-page/renderers/time.mjs.map +1 -0
  167. package/dist/web-page/renderers/unknown.cjs +20 -0
  168. package/dist/web-page/renderers/unknown.mjs +20 -0
  169. package/dist/web-page/renderers/unknown.mjs.map +1 -0
  170. package/dist/web-page/renderers/view.cjs +161 -0
  171. package/dist/web-page/renderers/view.mjs +161 -0
  172. package/dist/web-page/renderers/view.mjs.map +1 -0
  173. package/dist/web-page/renderers/wm.cjs +669 -0
  174. package/dist/web-page/renderers/wm.mjs +669 -0
  175. package/dist/web-page/renderers/wm.mjs.map +1 -0
  176. package/dist/web-page/skeleton.cjs +103 -0
  177. package/dist/web-page/skeleton.mjs +103 -0
  178. package/dist/web-page/skeleton.mjs.map +1 -0
  179. package/dist/web-page.cjs +114 -0
  180. package/dist/web-page.d.cts +19 -0
  181. package/dist/web-page.d.cts.map +1 -0
  182. package/dist/web-page.d.mts +19 -0
  183. package/dist/web-page.d.mts.map +1 -0
  184. package/dist/web-page.mjs +115 -0
  185. package/dist/web-page.mjs.map +1 -0
  186. package/dist/web.cjs +827 -0
  187. package/dist/web.d.cts +144 -0
  188. package/dist/web.d.cts.map +1 -0
  189. package/dist/web.d.mts +144 -0
  190. package/dist/web.d.mts.map +1 -0
  191. package/dist/web.mjs +828 -0
  192. package/dist/web.mjs.map +1 -0
  193. package/dist/wm-state.cjs +172 -0
  194. package/dist/wm-state.mjs +171 -0
  195. package/dist/wm-state.mjs.map +1 -0
  196. package/package.json +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aup-protocol.mjs","names":[],"sources":["../src/aup-protocol.ts"],"sourcesContent":["/**\n * AUP Protocol — Server-side node store and patch engine.\n *\n * Maintains the current AUP node tree for a session.\n * Validates and applies patches atomically.\n */\n\nimport type { AUPNode, AUPPatchOp } from \"./aup-types.js\";\nimport { validateNode, validatePatchOp } from \"./aup-types.js\";\n\nexport interface AUPRenderOptions {\n fullPage?: boolean;\n chrome?: boolean;\n theme?: string;\n style?: string;\n locale?: string;\n}\n\nexport class AUPNodeStore {\n private root: AUPNode | null = null;\n /** Flat index: id → node + parent reference for O(1) lookup */\n private index = new Map<string, { node: AUPNode; parent: AUPNode | null }>();\n /** Monotonic version counter — increments on every render or patch. */\n private _version = 0;\n /** Render options from the last aup_render call. */\n private _renderOptions: AUPRenderOptions = {};\n\n /** Current tree version (monotonically increasing). */\n get version(): number {\n return this._version;\n }\n\n /** Last render options (fullPage, style, chrome, etc.). */\n get renderOptions(): AUPRenderOptions {\n return this._renderOptions;\n }\n\n /** Save render options alongside the tree. */\n setRenderOptions(opts: AUPRenderOptions): void {\n this._renderOptions = opts;\n }\n\n /** Get the current root node (or null if no graph is active). */\n getRoot(): AUPNode | null {\n return this.root;\n }\n\n /** Find a node by id. */\n findNode(id: string): AUPNode | undefined {\n return this.index.get(id)?.node;\n }\n\n /** Set the full node tree (replaces any existing graph). */\n setRoot(root: AUPNode): void {\n const err = validateNode(root);\n if (err) throw new Error(`Invalid AUP node: ${err}`);\n this.root = root;\n this._version++;\n this.rebuildIndex();\n }\n\n /** Clear the graph. */\n clear(): void {\n this.root = null;\n this.index.clear();\n this._version++;\n }\n\n /**\n * Apply a batch of patch operations atomically.\n * If any op fails validation, the entire batch is rejected.\n */\n applyPatch(ops: AUPPatchOp[]): void {\n if (!this.root) throw new Error(\"No active AUP graph — call aup_render first\");\n\n // Validate all ops first\n for (const op of ops) {\n const err = validatePatchOp(op);\n if (err) throw new Error(`Invalid patch op: ${err}`);\n }\n\n // Snapshot for rollback\n const snapshot = JSON.parse(JSON.stringify(this.root)) as AUPNode;\n const snapshotIndex = new Map(this.index);\n\n try {\n for (const op of ops) {\n this.applyOneOp(op);\n }\n this._version++;\n } catch (e) {\n // Rollback\n this.root = snapshot;\n this.index = snapshotIndex;\n this.rebuildIndex();\n throw e;\n }\n }\n\n // ── Internal ──\n\n private applyOneOp(op: AUPPatchOp): void {\n switch (op.op) {\n case \"create\":\n this.opCreate(op);\n break;\n case \"update\":\n this.opUpdate(op);\n break;\n case \"remove\":\n this.opRemove(op);\n break;\n case \"reorder\":\n this.opReorder(op);\n break;\n }\n }\n\n private opCreate(op: { id: string; parentId: string; node: AUPNode; index?: number }): void {\n if (this.index.has(op.id)) throw new Error(`Node already exists: ${op.id}`);\n\n const parentEntry = this.index.get(op.parentId);\n if (!parentEntry) throw new Error(`Parent node not found: ${op.parentId}`);\n const parent = parentEntry.node;\n\n if (!parent.children) parent.children = [];\n\n const node = { ...op.node, id: op.id };\n const err = validateNode(node);\n if (err) throw new Error(`Invalid node in create: ${err}`);\n\n if (op.index !== undefined) {\n if (op.index < 0 || op.index > parent.children.length) {\n throw new Error(`Index out of bounds: ${op.index}`);\n }\n parent.children.splice(op.index, 0, node);\n } else {\n parent.children.push(node);\n }\n\n this.indexNode(node, parent);\n }\n\n private opUpdate(op: {\n id: string;\n props?: Record<string, unknown>;\n state?: Record<string, unknown>;\n events?: Record<string, unknown>;\n }): void {\n const entry = this.index.get(op.id);\n if (!entry) throw new Error(`Node not found: ${op.id}`);\n const node = entry.node;\n\n if (op.props && Object.keys(op.props).length > 0) {\n node.props = { ...(node.props ?? {}), ...op.props };\n }\n if (op.state && Object.keys(op.state).length > 0) {\n node.state = { ...(node.state ?? {}), ...op.state };\n }\n if (op.events !== undefined) {\n node.events = op.events as AUPNode[\"events\"];\n }\n }\n\n private opRemove(op: { id: string }): void {\n // Removing root clears the entire graph\n if (this.root && op.id === this.root.id) {\n this.clear();\n return;\n }\n\n const entry = this.index.get(op.id);\n if (!entry) throw new Error(`Node not found: ${op.id}`);\n const parent = entry.parent;\n if (!parent || !parent.children) throw new Error(`Cannot remove node: no parent`);\n\n const idx = parent.children.findIndex((c) => c.id === op.id);\n if (idx < 0) throw new Error(`Node not found in parent's children: ${op.id}`);\n\n // Remove from parent\n const [removed] = parent.children.splice(idx, 1);\n\n // Unindex the removed subtree\n this.unindexNode(removed!);\n }\n\n private opReorder(op: { id: string; parentId: string; index: number }): void {\n const entry = this.index.get(op.id);\n if (!entry) throw new Error(`Node not found: ${op.id}`);\n\n const parentEntry = this.index.get(op.parentId);\n if (!parentEntry) throw new Error(`Parent node not found: ${op.parentId}`);\n const parent = parentEntry.node;\n\n if (!parent.children) throw new Error(`Parent has no children`);\n\n const currentIdx = parent.children.findIndex((c) => c.id === op.id);\n if (currentIdx < 0) throw new Error(`Node not in specified parent: ${op.id}`);\n\n if (op.index < 0 || op.index >= parent.children.length) {\n throw new Error(`Reorder index out of bounds: ${op.index}`);\n }\n\n // Remove and re-insert\n const [node] = parent.children.splice(currentIdx, 1);\n parent.children.splice(op.index, 0, node!);\n }\n\n private rebuildIndex(): void {\n this.index.clear();\n if (this.root) {\n this.indexNode(this.root, null);\n }\n }\n\n private indexNode(node: AUPNode, parent: AUPNode | null): void {\n this.index.set(node.id, { node, parent });\n if (node.children) {\n for (const child of node.children) {\n this.indexNode(child, node);\n }\n }\n }\n\n private unindexNode(node: AUPNode): void {\n this.index.delete(node.id);\n if (node.children) {\n for (const child of node.children) {\n this.unindexNode(child);\n }\n }\n }\n}\n\n// ── Scene Manager (Preview/Program dual buffer) ──\n\nexport class AUPSceneManager {\n private scenes = new Map<string, AUPNodeStore>();\n private accessOrder: string[] = []; // LRU tracking (oldest first)\n private _activeSceneId: string | null = null;\n private maxScenes: number;\n\n constructor(opts?: { maxScenes?: number }) {\n this.maxScenes = opts?.maxScenes ?? 3;\n }\n\n get activeSceneId(): string | null {\n return this._activeSceneId;\n }\n\n /** Stage a scene (pre-render). Creates or updates the scene's store. */\n stage(sceneId: string, root: AUPNode, opts?: AUPRenderOptions): AUPNodeStore {\n let store = this.scenes.get(sceneId);\n if (!store) {\n store = new AUPNodeStore();\n this.scenes.set(sceneId, store);\n }\n store.setRoot(root);\n if (opts) store.setRenderOptions(opts);\n this.touch(sceneId);\n this.evictIfNeeded();\n return store;\n }\n\n /** Take a staged scene live. */\n take(sceneId: string): AUPNodeStore {\n const store = this.scenes.get(sceneId);\n if (!store) throw new Error(`Scene not found/not staged: ${sceneId}`);\n this._activeSceneId = sceneId;\n this.touch(sceneId);\n return store;\n }\n\n /** Release a scene's resources. Cannot release the active scene. */\n release(sceneId: string): void {\n if (this._activeSceneId === sceneId) {\n throw new Error(`Cannot release active/live scene: ${sceneId}`);\n }\n this.scenes.delete(sceneId);\n this.accessOrder = this.accessOrder.filter((id) => id !== sceneId);\n }\n\n /** Get a scene's store by ID. */\n getScene(sceneId: string): AUPNodeStore | undefined {\n return this.scenes.get(sceneId);\n }\n\n /** Get the active (live) scene. */\n getActiveScene(): { sceneId: string; store: AUPNodeStore } | null {\n if (!this._activeSceneId) return null;\n const store = this.scenes.get(this._activeSceneId);\n if (!store) return null;\n return { sceneId: this._activeSceneId, store };\n }\n\n /** Apply patches to a staged scene. */\n applyPatch(sceneId: string, ops: AUPPatchOp[]): void {\n const store = this.scenes.get(sceneId);\n if (!store) throw new Error(`Scene not found: ${sceneId}`);\n store.applyPatch(ops);\n this.touch(sceneId);\n }\n\n /** Touch LRU — move sceneId to end (most recent). */\n private touch(sceneId: string): void {\n this.accessOrder = this.accessOrder.filter((id) => id !== sceneId);\n this.accessOrder.push(sceneId);\n }\n\n /** Evict oldest non-active scenes if over limit. */\n private evictIfNeeded(): void {\n while (this.scenes.size > this.maxScenes) {\n const victim = this.accessOrder.find(\n (id) => id !== this._activeSceneId && this.scenes.has(id),\n );\n if (!victim) break; // all remaining are active — can't evict\n this.scenes.delete(victim);\n this.accessOrder = this.accessOrder.filter((id) => id !== victim);\n }\n }\n}\n"],"mappings":"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"}