PulseTrade.Comm.Spa.Dynamic.Renderer
0.1.104
dotnet add package PulseTrade.Comm.Spa.Dynamic.Renderer --version 0.1.104
NuGet\Install-Package PulseTrade.Comm.Spa.Dynamic.Renderer -Version 0.1.104
<PackageReference Include="PulseTrade.Comm.Spa.Dynamic.Renderer" Version="0.1.104" />
<PackageVersion Include="PulseTrade.Comm.Spa.Dynamic.Renderer" Version="0.1.104" />
<PackageReference Include="PulseTrade.Comm.Spa.Dynamic.Renderer" />
paket add PulseTrade.Comm.Spa.Dynamic.Renderer --version 0.1.104
#r "nuget: PulseTrade.Comm.Spa.Dynamic.Renderer, 0.1.104"
#:package PulseTrade.Comm.Spa.Dynamic.Renderer@0.1.104
#addin nuget:?package=PulseTrade.Comm.Spa.Dynamic.Renderer&version=0.1.104
#tool nuget:?package=PulseTrade.Comm.Spa.Dynamic.Renderer&version=0.1.104
PulseTrade.Comm.Spa.Dynamic.Renderer
基於PulseTrade.Comm.Spa.Dynamic.Contracts的pure WebSharper F# TA workspace renderer。
Responsibility
- owns:DOM/SVG chart layout、bounded local viewport、row visibility、compact query/Add Row UI、typed action callback。
- does not own:PTCS、WebSocket、SQL、market-data provider、credential、ACL或authorization。
- local-only:pan、zoom、row toggle、Reset View。
- remote typed action:Change Query、Add Row、Remove Row、Reset Canvas;每個row以toggle + 固定寬度remove control呈現,remote command in-flight時remove同樣disabled。
- shared research view:同一visible index驅動各row crosshair/cursor values;transport timestamp壓成
MM-dd HH:mm,OHLC detail可換行,時間標籤在SVG外以HTML grid呈現,避免mobile非等比縮放文字。 - status:保留freshness、watermark、quality與recoverable last-good error;remote in-flight只禁用remote submit,不凍結local view。cache rehydrate進入
PausedForResync時仍允許local pan/zoom/hover/cursor,但不送VisibleRangeChanged或SharedCursorChanged,直到authoritative resync完成。 - query draft:只從
TaWorkspaceDocument.DefaultView的query.*metadata初始化;document revision不變的poll不覆蓋使用者輸入,metadata缺失時保持空白,禁止回退到demo symbol/interval/date。 - Apply boundary:instrument/interval/range只更新local draft;選擇interval不送action、不改authoritative query、不重render。按
Load / Apply送ChangeTaQuery;accepted後依merged base/reference temporal axis選[FromUtc, ToUtcExclusive)local window,不改authoritative data/revision或清cache。pending期間的新query取代queue中的舊intent,transport仍維持one-in-flight。 - loaded range:active shared-axis detail目前最多4000 positions;overview以bounded bucket呈現reference domain,左右handle可resize,中段可move,48/200/All可切換。selection依resolved window真實比例繪製,沒有固定visual寬度下限;24 CSS px hit resolver在小selection重疊時仍明確區分left/move/right。drag只更新draft,pointer release才commit一次render。多年coverage+bounded active detail仍需RFC-0032的versioned generic coverage projection,不得以提高retained detail cap冒充完成。
- Add/Edit Row:由
TaWorkspaceDocument.EditorSchemas生成generic Text/Integer/Decimal/Boolean/Choice/Scale/List/Group表單;同template可建立多個參數實例。帶ptcs.dynamic.editor.binding.v1的row可預填並以stable RowId重新設定;legacy無binding row保持read-only。editor draft不會被poll覆蓋。 - Reset Canvas:送remote typed action恢復mount時initial ordered rows/query;Reset View只恢復local viewport。
- timeline:各trace依timestamp對齊reference timeline;SMA/ADX/MACD warm-up縮短不會用array index錯位或造成sequence failure。
- temporal projection:
TemporalPoint明確指定source interval與projection;coarse K棒用CandleSpan跨base slots,coarse line用RepeatAcrossBaseBuckets,只在close後可知的indicator用StepAfterClose,避免look-ahead。 - shared temporal data:
temporal-axis.v1提供唯一sparse Position/time authority,temporal-series.v1以Position join。Renderer不依scale推算缺失點;同一K的preview revision原位替換。candlestick可由TaCandleDataRefs指定的O/H/L/C/V五條scalar series合成。 - multi-candle:同一row可同時畫1K/5K等多個candlestick traces;base candle維持實心,coarse candle以trace色outline/dashed wick呈現並保留source interval metadata。
- generic marker:
TaTraceKind.Marker以同row的candlestick trace作target;Position是唯一空間authority,EventTime只進tooltip。marker不參與reference timeline、Y autoscale或numeric legend;每個visible bucket依stable wire order直接畫前4筆,其餘以keyboard-accessible+Ncluster逐筆檢視完整label/tooltip。Plot不畫文字label;Label/Tooltip進SVG title與row-local OFI。hollow marker保留semantic stroke,另以pointer-inert contrast halo確保dark plot可辨識。 - overview stripe:
TaTraceKind.OverviewStripe以canonical event time定位navigator X;同trace同X合併成單一full-height線與count,同X不同trace依collision group/layer order分固定lane。paths按trace批次,hover lookup bounded;stripe不參與close sampling、Y-domain或K-bar plot pointer ownership。 - row resize:每列separator支援pointer、Arrow 8px、Shift+Arrow 32px、Home/double-click reset。override只以
CanvasInstanceId + RowId保存在active renderer;同canvas revision/scenario replacement保留,reload/unmount/canvas identity替換清除。candlestick/composite範圍180..720px,scalar範圍96..480px;marker presence不再改row baseline。 - row-local data window:每列從自身resolved datapoint同時取得timestamp與value;candlestick固定顯示
O/H/L/C/V,line/histogram顯示value。shared cursor頂端為兩行yyyy-MM-dd/HH:mm:ss;missing或invalid timestamp明示Unavailable,不借用base row。 - row composition:同一immutable
DataRef可同時出現在overlay row與一或多個separate rows;Renderer逐row獨立解析與呈現,不依DataRef合併row。overlay/分列完全由owner提供的Rows/Traces決定。 - cursor/style:K棒、line point與cross-row cursor共用slot-center幾何;indicator line width為1.25,histogram維持1.0。
- event-time interaction:
BaseRowId的真實timestamp驅動shared cursor;coarse row只使用finalized containing/as-of point,否則missing。viewport release送半開event-time range,pending期間controls不可重入。 - plot surface theme:consumer以
TaPlotSurfacePresentationCodec.apply在DefaultView選Light/Dark;Renderer用同一palette繪製candle、TA、overview、grid、cursor、axis、legend與tooltip。未指定維持Light,不讀browser preference或consumer CSS作authority。 - histogram polarity:consumer以
TaHistogramTraceOptionsCodec.apply設定正/負色;Renderer依value符號產生兩個batched paths。未指定則兩色皆沿用TaTraceSpec.Color,不從trace name/label推論MACD或交易語意。
API
TaWorkspaceRenderer.render
TaWorkspaceRenderer.defaultOptions
callbacks
runtimeState
TaWorkspaceRenderer.renderWithProjectionCommit
TaWorkspaceRenderer.defaultOptions
callbacks
(fun committedState -> publishReceipt committedState)
runtimeState
TaWorkspaceRenderer.renderWithProjectionCommitAndDisplayTimeZone
TaWorkspaceRenderer.defaultOptions
callbacks
(fun committedState -> publishReceipt committedState)
displayTimeZone.View
runtimeState
TaWorkspaceRenderer.renderWithDisplayTimeZone
TaWorkspaceRenderer.defaultOptions
callbacks
displayTimeZone.View
runtimeState
render與renderWithProjectionCommit維持UTC相容;page owner以typed Var<SduiDisplayTimeZone>.View呼叫display-time overload。切換只更新visible axis、cursor、row data window、metadata、marker/stripe/OFI tooltip,canonical UTC attributes、loaded data、viewport、revision及action channel皆不變。CT/ET由唯一formatter依event instant套用CST/CDT或EST/EDT;consumer不得複製formatter。callback只在current generation的full mount或same-topology visible-row refresh完成,並跨下一個animation-frame boundary後觸發;stale、superseded、current-state mismatch與相同tuple重複候選不觸發。runtimeState是Var<RuntimeState>;host adapter負責strict frame decode/reducer與更新Var。正式runtime從current document讀editor catalog;TaRendererOptions.EditorSchemas只作standalone/test fallback。callbacks.SubmitAction接收含RequestId/revision的DynamicActionRequest並回DynamicActionResult;Add使用ApplyTemplate(None, ...),Edit使用ApplyTemplate(Some rowId, ...),不提供arbitrary URL、SQL或raw credential。
Verification
- exact-package model/dependency/source tests:
tests/PulseTrade.Comm.Spa.Dynamic.Renderer.Tests。 - exact-package live bundle:
tests/PulseTrade.Comm.Spa.Dynamic.Renderer.BrowserDemo。 - desktop/mobile F# Playwright:
scripts/verify-ta-generic-marker-playwright.fsx。 - current owner release:
PulseTrade.Comm.Spa.Dynamic.Renderer 0.1.89,exact依賴Contracts[0.1.33]與FSharp.Core[10.1.400]。committed viewport range直接訂閱local UI state,不再等待整棵chart stack replacement;row generation、ready barrier與single-render contract不變。RFC-0032的loaded-coverage、tiny-selection resolver與revision gates不變。
RFC-0028 release為Renderer 0.1.76、Contracts [0.1.29]、Interactive.Client 0.1.67。它包含RFC-0027 typed dark plot/Histogram polarity,並以DefaultView.visibleBars初始化fresh canvas;plot marker只保留glyph/tooltip,每列在cursor gutter與plot間提供固定24px OFI band,最多4筆++N。一般plot hover依axis snap;直接marker/cluster hit以accepted placement exact slot更新同一shared cursor並停止冒泡,避免高密度同CSS pixel時偏至鄰slot。Overview selection為淺灰,visual boundaries為亮綠2 CSS px且不改transparent hit targets。
RFC-0030 candidate為Renderer 0.1.82、Contracts [0.1.30]、Interactive.Client 0.1.73。每個row control line固定single-line Y band;右側trace region使用nowrap與row-local overflow。Marker/OverviewStripe不出現在trace controls,Reset Canvas與canvas identity replacement仍清除local hidden/removed state。
2026-09-29 release:exact graph為Contracts 0.1.33、Renderer 0.1.92、Interactive.Client 0.1.83、Dynamic.Ptcs 0.1.54、Ptcs.Client 0.1.93。長label下Edit固定52px;navigator以bounded wick/up/down paths保留OHLC micro-candles,OverviewStripe仍完全由consumer authoring;pending viewport採local immediate+single latest queue。Cursor gate使用browser event-to-render telemetry,driver round-trip僅診斷。Official signatures/dependencies/manifest/entry parity已通過;真SPAA consumer通過前不宣稱產品驗收。
RFC-0032最新candidate Renderer 0.1.103:PollInFlight與PausedForResync期間navigator仍可local preview/release,boundary intent進single latest queue;action settled或runtime回READY時依最新authority排出一次。透明interaction surface提供hit area,mousedown bubble至live outer SVG;handler以該SVG currentTarget同時作event owner與geometry authority,避免inner/outer border座標偏移。document move/up與24 CSS px hit resolver不變;Unmounted/Disposed仍禁止local操作。Source commit 651ecc5的NuGet.org signature、exact dependency與entry parity已驗證;consumer真SPAA通過前維持candidate狀態。
Navigator跨iframe修正candidate Renderer 0.1.104:live outer SVG改用Pointer Events並在pointerdown取得capture,因此游標移出SVG或child iframe後仍能收到move/up;pointercancel只丟棄draft,不送action。document pointer listener只作capture不可用時fallback。Owner iframe gate已驗frame x=80、navigator x=101、release x=68仍唯一送出Earlier coverage;正式package與真SPAA驗收完成前維持candidate狀態。
RFC-0017之後,cache rehydrate即使保留current identity/revision,只要validated Data object替換仍會重畫。row legend以rowId + local trace index隔離;All模式保留完整scale/cursor arrays,但以bounded candle/line paths呈現。non-base candle cursor使用一次range projection,不再對每個base timestamp掃描完整source。
RFC-0018之後,accepted ChangeTaQuery在host frames已合併後選local viewport。invalid/no-intersection/stale query保留原window並顯示feedback;local selection不送第二個range action。中間Renderer 0.1.34不可使用,因其callback concurrency與正式client one-in-flight不一致。
RFC-0019/0020之後,每列依自身event-time與plot width產生adaptive axis,crosshair只覆蓋該列plot。loaded coverage可大於visible cap;越過boundary時以VisibleRangeChanged要求document query範圍內的相鄰coverage,merge後依event-time anchor重定位。Renderer prepare與row mount/refresh使用generation-aware frame scheduling;consumer仍負責provider query、source merge與cache authority。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FSharp.Core (= 10.1.400)
- PulseTrade.Comm.Spa.Dynamic.Contracts (= 0.1.33)
- WebSharper.FSharp (>= 10.1.6.676)
- WebSharper.UI (>= 10.1.5.676)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on PulseTrade.Comm.Spa.Dynamic.Renderer:
| Package | Downloads |
|---|---|
|
PulseTrade.Comm.Spa.Dynamic.Ptcs.Client
Pure WebSharper same-origin PTCS transient client adapter for Dynamic TA Research. |
|
|
PulseTrade.Comm.Spa.Dynamic.Interactive.Client
Transport-neutral WebSharper client shell for embedding the Dynamic SDUI runtime in interactive hosts. |
|
|
PulseTrade.MarketData.E2EQuotation.Dynamic.Browser
Bounded pure WebSharper E2EQuotation adapter for the shared Dynamic TA renderer. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.104 | 0 | 9/29/2026 |
| 0.1.103 | 0 | 9/29/2026 |
| 0.1.102 | 0 | 9/29/2026 |
| 0.1.100 | 0 | 9/29/2026 |
| 0.1.99 | 0 | 9/29/2026 |
| 0.1.98 | 0 | 9/29/2026 |
| 0.1.95 | 0 | 9/28/2026 |
| 0.1.94 | 0 | 9/28/2026 |
| 0.1.92 | 24 | 9/28/2026 |
| 0.1.91 | 44 | 9/28/2026 |
| 0.1.89 | 36 | 9/28/2026 |
| 0.1.88 | 39 | 9/28/2026 |
| 0.1.87 | 41 | 9/28/2026 |
| 0.1.86 | 34 | 9/28/2026 |
| 0.1.85 | 32 | 9/28/2026 |
| 0.1.83 | 48 | 9/27/2026 |
| 0.1.82 | 49 | 9/27/2026 |
| 0.1.81 | 49 | 9/27/2026 |
| 0.1.76 | 53 | 9/25/2026 |
| 0.1.70 | 48 | 9/25/2026 |